window.requestAnimFrame = (function (callback,time) { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimaitonFrame || function (callback) { window.setTimeout(callback, time); }; })();
/* * t: current time(當前時間,小於持續時間,tween返回當前時間目標的狀態); * b: beginning value(初始值); * c: change in value(變化量); * d: duration(持續時間)。 */
每一個效果都分三個緩動方式,分別是:javascript
1.java
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.返回頂部/setIntervalweb
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算法
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();