资讯专栏INFORMATION COLUMN

JS—动画缓动—tween.js

wangxinarhat / 3073人阅读

摘要:动画运动算法线性匀速运动效果二次方的缓动三次方的缓动四次方的缓动五次方的缓动正弦曲线的缓动指数曲线的缓动圆形曲线的缓动指数衰减的正弦曲线缓动超过范围的三次方缓动指数衰减的反弹缓动。

requestAnimFrame兼容
window.requestAnimFrame = (function (callback,time) {
    return window.requestAnimationFrame ||
        window.webkitRequestAnimationFrame ||
        window.mozRequestAnimationFrame ||
        window.oRequestAnimationFrame ||
        window.msRequestAnimaitonFrame ||
        function (callback) {
            window.setTimeout(callback, time);
        };
})();
tween.js 参数
/*
 * t: current time(当前时间,小于持续时间,tween返回当前时间目标的状态);
 * b: beginning value(初始值);
 * c: change in value(变化量);
 * d: duration(持续时间)。
*/
动画运动算法

Linear:线性匀速运动效果;

Quadratic:二次方的缓动(t^2);

Cubic:三次方的缓动(t^3);

Quartic:四次方的缓动(t^4);

Quintic:五次方的缓动(t^5);

Sinusoidal:正弦曲线的缓动(sin(t));

Exponential:指数曲线的缓动(2^t);

Circular:圆形曲线的缓动(sqrt(1-t^2));

Elastic:指数衰减的正弦曲线缓动;

Back:超过范围的三次方缓动((s+1)t^3 – st^2);

Bounce:指数衰减的反弹缓动。

每个效果都分三个缓动方式,分别是:

easeIn:从0开始加速的缓动,也就是先慢后快;

easeOut:减速到0的缓动,也就是先快后慢;

easeInOut:前半段从0开始加速,后半段减速到0的缓动。

Tween.js动画算法使用示意实例页面

例子

1.

var t = 0, b = 0, c = 100, d = 10;
var step = function () {
    // value就是当前的位置值
    // 例如我们可以设置DOM.style.left = value + "px"实现定位
    var value = Tween.Linear(t, b, c, d);
    t++;
    if (t <= d) {
         // 继续运动
         requestAnimationFrame(step);
    } else {
        // 动画结束
    }
};

2.返回顶部/setInterval

backTop(){
        var Tween = {
          Linear: function(t, b, c, d) { //匀速运动
            return c * t / d + b; 
          }
        }
        Math.tween = Tween;
        var t = 0;
        const b = document.documentElement.scrollTop;
        const c = 100;
        const d = 5;
        const setInt = setInterval(()=>{
          t--;
          //console.log(t)
          if(document.documentElement.scrollTop == 0){clearInterval(setInt)}
          //console.log(t);
          const backTop = Tween.Linear(t,b,c,d);
          //console.log(backTop);
          document.documentElement.scrollTop = backTop;
        },5)
},


学趣乐园,backLeft

Tweenjs 安装
npm install @tweenjs/tween.js
例子
var box = document.createElement("div");
box.style.setProperty("background-color", "#008800");
box.style.setProperty("width", "100px");
box.style.setProperty("height", "100px");
document.body.appendChild(box);
 
// 动画循环
function animate(time) {
    requestAnimationFrame(animate);
    TWEEN.update(time);
}
requestAnimationFrame(animate);
 
var coords = { x: 0, y: 0 }; // 开始位置
var tween = new TWEEN.Tween(coords) // 创建一个更改目标的tween

.to({ x: 300, y: 200 }, 1000) // 目的位置,1s
.easing(TWEEN.Easing.Quadratic.Out) // 平滑动画
.onUpdate(function() { // 目标更新后调用
    // CSS translation
    box.style.setProperty("transform", "translate(" + coords.x + "px, " + coords.y + "px)");
})
.start(); 

Tween.js各类原生动画运动缓动算法
Projects using tween.js

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108170.html

相关文章

  • tween.js缓动(补间动画

    摘要:首先引入一个概念就补间动画做动画时会用到类,利用它可以做很多动画效果,例如缓动弹簧等等。代表的就是最后一帧减去初始值就是变化量,代表最后一帧的结束也是动画的结束。 一、理解tween.js 如果看到上面的已经理解了,可以跳过下面的部分.下面为对Tween.js的解释 下面就介绍如何使用这个Tween了,首先b、c、d三个参数(即初始值,变化量,持续时间)在缓动开始前,是需要先确定好的。...

    chengjianhua 评论0 收藏0
  • JS进阶篇--window.requestAnimationFrame与Tween.js配合使用实现

    摘要:注意如果想得到连贯的逐帧动画,函数中必须重新调用。如果你想做逐帧动画的时候,你应该用这个方法。这个回调函数会收到一个参数,这个类型的参数指示当前时间距离开始触发的回调的时间。 window.requestAnimationFrame 概述 window.requestAnimationFrame()这个方法是用来在页面重绘之前,通知浏览器调用一个指定的函数,以满足开发者操作动画的需求。...

    Ilikewhite 评论0 收藏0
  • JS进阶篇--window.requestAnimationFrame与Tween.js配合使用实现

    摘要:注意如果想得到连贯的逐帧动画,函数中必须重新调用。如果你想做逐帧动画的时候,你应该用这个方法。这个回调函数会收到一个参数,这个类型的参数指示当前时间距离开始触发的回调的时间。 window.requestAnimationFrame 概述 window.requestAnimationFrame()这个方法是用来在页面重绘之前,通知浏览器调用一个指定的函数,以满足开发者操作动画的需求。...

    codergarden 评论0 收藏0
  • JS进阶篇--window.requestAnimationFrame与Tween.js配合使用实现

    摘要:注意如果想得到连贯的逐帧动画,函数中必须重新调用。如果你想做逐帧动画的时候,你应该用这个方法。这个回调函数会收到一个参数,这个类型的参数指示当前时间距离开始触发的回调的时间。 window.requestAnimationFrame 概述 window.requestAnimationFrame()这个方法是用来在页面重绘之前,通知浏览器调用一个指定的函数,以满足开发者操作动画的需求。...

    zorpan 评论0 收藏0
  • JS进阶篇--window.requestAnimationFrame与Tween.js配合使用实现

    摘要:注意如果想得到连贯的逐帧动画,函数中必须重新调用。如果你想做逐帧动画的时候,你应该用这个方法。这个回调函数会收到一个参数,这个类型的参数指示当前时间距离开始触发的回调的时间。 window.requestAnimationFrame 概述 window.requestAnimationFrame()这个方法是用来在页面重绘之前,通知浏览器调用一个指定的函数,以满足开发者操作动画的需求。...

    Riddler 评论0 收藏0

发表评论

0条评论

wangxinarhat

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<