摘要:動(dòng)畫運(yùn)動(dòng)算法線性勻速運(yùn)動(dòng)效果二次方的緩動(dòng)三次方的緩動(dòng)四次方的緩動(dòng)五次方的緩動(dòng)正弦曲線的緩動(dòng)指數(shù)曲線的緩動(dòng)圓形曲線的緩動(dòng)指數(shù)衰減的正弦曲線緩動(dòng)超過范圍的三次方緩動(dòng)指數(shù)衰減的反彈緩動(dòng)。
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 參數(shù)
/* * t: current time(當(dāng)前時(shí)間,小于持續(xù)時(shí)間,tween返回當(dāng)前時(shí)間目標(biāo)的狀態(tài)); * b: beginning value(初始值); * c: change in value(變化量); * d: duration(持續(xù)時(shí)間)。 */動(dòng)畫運(yùn)動(dòng)算法
Linear:線性勻速運(yùn)動(dòng)效果;
Quadratic:二次方的緩動(dòng)(t^2);
Cubic:三次方的緩動(dòng)(t^3);
Quartic:四次方的緩動(dòng)(t^4);
Quintic:五次方的緩動(dòng)(t^5);
Sinusoidal:正弦曲線的緩動(dòng)(sin(t));
Exponential:指數(shù)曲線的緩動(dòng)(2^t);
Circular:圓形曲線的緩動(dòng)(sqrt(1-t^2));
Elastic:指數(shù)衰減的正弦曲線緩動(dòng);
Back:超過范圍的三次方緩動(dòng)((s+1)t^3 – st^2);
Bounce:指數(shù)衰減的反彈緩動(dòng)。
每個(gè)效果都分三個(gè)緩動(dòng)方式,分別是:
easeIn:從0開始加速的緩動(dòng),也就是先慢后快;
easeOut:減速到0的緩動(dòng),也就是先快后慢;
easeInOut:前半段從0開始加速,后半段減速到0的緩動(dòng)。
Tween.js動(dòng)畫算法使用示意實(shí)例頁面
例子1.
var t = 0, b = 0, c = 100, d = 10; var step = function () { // value就是當(dāng)前的位置值 // 例如我們可以設(shè)置DOM.style.left = value + "px"實(shí)現(xiàn)定位 var value = Tween.Linear(t, b, c, d); t++; if (t <= d) { // 繼續(xù)運(yùn)動(dòng) requestAnimationFrame(step); } else { // 動(dòng)畫結(jié)束 } };
2.返回頂部/setInterval
backTop(){ var Tween = { Linear: function(t, b, c, d) { //勻速運(yùn)動(dòng) 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) },
學(xué)趣樂園,backLeft
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); // 動(dòng)畫循環(huán) function animate(time) { requestAnimationFrame(animate); TWEEN.update(time); } requestAnimationFrame(animate); var coords = { x: 0, y: 0 }; // 開始位置 var tween = new TWEEN.Tween(coords) // 創(chuàng)建一個(gè)更改目標(biāo)的tween .to({ x: 300, y: 200 }, 1000) // 目的位置,1s .easing(TWEEN.Easing.Quadratic.Out) // 平滑動(dòng)畫 .onUpdate(function() { // 目標(biāo)更新后調(diào)用 // CSS translation box.style.setProperty("transform", "translate(" + coords.x + "px, " + coords.y + "px)"); }) .start();
Tween.js各類原生動(dòng)畫運(yùn)動(dòng)緩動(dòng)算法
Projects using tween.js
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108170.html
摘要:首先引入一個(gè)概念就補(bǔ)間動(dòng)畫做動(dòng)畫時(shí)會(huì)用到類,利用它可以做很多動(dòng)畫效果,例如緩動(dòng)彈簧等等。代表的就是最后一幀減去初始值就是變化量,代表最后一幀的結(jié)束也是動(dòng)畫的結(jié)束。 一、理解tween.js 如果看到上面的已經(jīng)理解了,可以跳過下面的部分.下面為對(duì)Tween.js的解釋 下面就介紹如何使用這個(gè)Tween了,首先b、c、d三個(gè)參數(shù)(即初始值,變化量,持續(xù)時(shí)間)在緩動(dòng)開始前,是需要先確定好的。...
摘要:注意如果想得到連貫的逐幀動(dòng)畫,函數(shù)中必須重新調(diào)用。如果你想做逐幀動(dòng)畫的時(shí)候,你應(yīng)該用這個(gè)方法。這個(gè)回調(diào)函數(shù)會(huì)收到一個(gè)參數(shù),這個(gè)類型的參數(shù)指示當(dāng)前時(shí)間距離開始觸發(fā)的回調(diào)的時(shí)間。 window.requestAnimationFrame 概述 window.requestAnimationFrame()這個(gè)方法是用來在頁面重繪之前,通知瀏覽器調(diào)用一個(gè)指定的函數(shù),以滿足開發(fā)者操作動(dòng)畫的需求。...
摘要:注意如果想得到連貫的逐幀動(dòng)畫,函數(shù)中必須重新調(diào)用。如果你想做逐幀動(dòng)畫的時(shí)候,你應(yīng)該用這個(gè)方法。這個(gè)回調(diào)函數(shù)會(huì)收到一個(gè)參數(shù),這個(gè)類型的參數(shù)指示當(dāng)前時(shí)間距離開始觸發(fā)的回調(diào)的時(shí)間。 window.requestAnimationFrame 概述 window.requestAnimationFrame()這個(gè)方法是用來在頁面重繪之前,通知瀏覽器調(diào)用一個(gè)指定的函數(shù),以滿足開發(fā)者操作動(dòng)畫的需求。...
摘要:注意如果想得到連貫的逐幀動(dòng)畫,函數(shù)中必須重新調(diào)用。如果你想做逐幀動(dòng)畫的時(shí)候,你應(yīng)該用這個(gè)方法。這個(gè)回調(diào)函數(shù)會(huì)收到一個(gè)參數(shù),這個(gè)類型的參數(shù)指示當(dāng)前時(shí)間距離開始觸發(fā)的回調(diào)的時(shí)間。 window.requestAnimationFrame 概述 window.requestAnimationFrame()這個(gè)方法是用來在頁面重繪之前,通知瀏覽器調(diào)用一個(gè)指定的函數(shù),以滿足開發(fā)者操作動(dòng)畫的需求。...
摘要:注意如果想得到連貫的逐幀動(dòng)畫,函數(shù)中必須重新調(diào)用。如果你想做逐幀動(dòng)畫的時(shí)候,你應(yīng)該用這個(gè)方法。這個(gè)回調(diào)函數(shù)會(huì)收到一個(gè)參數(shù),這個(gè)類型的參數(shù)指示當(dāng)前時(shí)間距離開始觸發(fā)的回調(diào)的時(shí)間。 window.requestAnimationFrame 概述 window.requestAnimationFrame()這個(gè)方法是用來在頁面重繪之前,通知瀏覽器調(diào)用一個(gè)指定的函數(shù),以滿足開發(fā)者操作動(dòng)畫的需求。...
閱讀 1413·2023-04-26 03:04
閱讀 2365·2019-08-30 15:44
閱讀 3736·2019-08-30 14:15
閱讀 3541·2019-08-27 10:56
閱讀 2758·2019-08-26 13:53
閱讀 2626·2019-08-26 13:26
閱讀 3089·2019-08-26 12:11
閱讀 3618·2019-08-23 18:21