關於緩動動畫函數的封裝

♥緩動動畫函數html


 

· 以前我在博客上寫過勻速的動畫函數 :http://www.javashuo.com/article/p-mrnjvbhf-bv.html函數

· 與勻速的相比  有相同的地方 也有不一樣的地方 我在這裏就簡單的寫一遍動畫

 

  一. 首先仍是同樣,由於它是個函數體咱們要傳參  即 : spa

    1.移動的元素code

    2.移動的目的地htm

   

   二. 和勻速的同樣  要先清理定時器 否則會發生點擊屢次移動的速度愈來愈快的情況blog

     1.由於每點擊一次按鈕 就會多生成一個定時器   生成的多了以後 速度就會加快 由於若是兩個定時器一塊兒進行 本來40的速度就會變成80element

     2.由於咱們寫的是緩動的動畫效果  因此可能視覺上看的並非很明顯 可是咱們要注意偏差  要作到儘可能嚴謹get

  三. 和勻速不一樣的地方博客

       每次移動的距離是變化的   這個的具體實現是這樣的:

         每次令step = (target-current)/10  

         這樣會出現有小數存在的狀況 然而若是一直有小數 咱們一直沒法到達重點 就會是一個死循環 

         若是step是正數  咱們向下取整 那麼也是永遠到不了的 由於到了0.x的小數的時候你向下取整  永遠是0  也止步不前

         因此說 正數的話要向上取整   負數的話向下取整就能夠解決這個問題

      下面給出代碼:

    

function animate(element, target) {
    //先清理定時器
    clearInterval(element.timeID);


//緩動動畫函數的封裝
    element.timeID= setInterval(
        function () {
            var current = element.offsetLeft;
            var step = (target - current) / 10;
            //若是step 是正數 那麼取的時候要向上取整  否則永遠沒法到達目的地
            //  若是step 是負數 那麼取得時候要向下取整  否則永遠沒法到達目的地
            step = step > 0 ? Math.ceil(step) : Math.floor(step);
            current += step;
            element.style.left = current + "px";
            if (current == target){
                clearInterval(element.timeID);
            }
            console.log("當前距離是"+ current +",每一步移動"+Math.abs(step));
       //這個寫入操做臺的呢 是爲了防止有錯誤 就是說用來檢查本身寫的對不對 若是你寫熟練了那麼能夠去掉 } ,
20) }
相關文章
相關標籤/搜索