js基礎——動畫函式封裝
阿新 • • 發佈:2022-05-20
動畫函式簡單封裝
主義函式需要傳遞2個引數,動畫物件和移動到的距離
function animate(obj, target, pos = undefined) { // obj是動畫物件,target是目標距離,pos是定位方式。 if (obj.style.position != '' && pos == undefined); else if (pos == undefined) obj.style.position = 'relative'; else obj.style.position = pos; var timer = setInterval(function() { if (obj.offsetLeft >= target) { clearInterval(timer); } obj.style.left = obj.offsetLeft + 1 + 'px'; }, 10); }
動畫函式給不同元素記錄不同定時器
如果多個元素都使用這個動畫函式,每次都要var宣告定時器。我們可以給不同的元素使用不同的定時器(自己專門用自己的定時器)。
核心原理:利用js是一門動態語言,可以很方便的給當前物件新增屬性。
可以利用這一規則,優化上面的程式碼,如下所示:
function animate(obj, target, pos = undefined) { ... obj.timer = setInterval(function() { if (obj.offsetLeft >= target) { clearInterval(obj.timer); } ... }, 10); }
上述程式碼其實還有一個問題,如果動畫函式被呼叫多次,那麼每次都會新建一個定時器,解決的辦法就是在建立定時器之前清空定時器。如下所示
function animate(obj, target, pos = undefined) {
...
clearInterval(obj.timer);
...
}
緩動效果原理
緩動動畫就是讓元素運動速度有所變化,最常見的是讓速度慢慢停下來
思路:
- 讓盒子每次移動的距離慢慢變小,速度就會慢慢落下來。
- 核心演算法: 作為移動距離的步長。