1. 程式人生 > 其它 >緩動動畫特效

緩動動畫特效

運用到的知識點:setInterval定時器;clearInterval清除定時器;offset系列中offsetLeft;

原理分析:

  1. 首先我們建立一個animate(obj,target)函式,這個函式用來封裝我們的緩動效果,其中兩個形參分別是要運動的物件元素obj和它的最終位置target;
  2. 然後在當前函式中建立定時器timer及其執行函式;
  3. 通過獲取物件元素的位置(obj.offsetLeft)加上我們的步長(step)來動態的給我們的物件元素的left賦值以達到移動的效果;
  4. 最後在定時器中新增判斷語句(obj.offsetLeft >=target)來判斷元素物件是否到達指定位置,滿足則執行清除當前物件的定時器的語句clearInterval(obj.timer)
  5. 其中求步長step的公式為:(targe - obj.offsetLeft)/ 10 既目標值減去當前物件的位置再除以10
  6. 附加點:當我們不想立即執行這個效果,例如:我們想通過一個按鈕btn來呼叫animate函式:既   btn.addEventListener('click',function(){ animate(obj,target); }) 這個時候會出現一個bug,就是我們瘋狂點選btn時候會建立多個定時器,導致元素物件移動速度變快;解決辦法是在呼叫animate這個函式的時候先清除以前的定時器:clearInterval(obj);

原始碼:

  

        //簡單動畫函式封裝
function animate(obj,target) { //當我們不停的點選按鈕,這個元素的速度會越來越快,因為開啟了太多的定時器 //解決方案是 讓我們元素只有一個定時器執行;先清除以前的定時器,只保留當前的一個定時器執行 clearInterval(obj); var timer=setInterval(function(){ //步長值寫到定時器裡面 var step = (target - obj.offsetLeft) / 10;
if(obj.offsetLeft >=target){ clearInterval(object.timer); } obj.style.left = obj.offsetLeft + step + 'px'; },10) }