关于缓动动画函数的封装

♥缓动动画函数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) }
相关文章
相关标签/搜索