0


JavaScript动画

动画原理

核心原理 就是通过定时器setInterval()不断移动盒子的位置

实现步骤:

   1.获得盒了当前位置

    2让盒子在当前位置加上1个移动距离

    3.利用定时器不断重复这个揉作

    4.加一个结束定时器的条件

    5.注意此元素需要添加定位,才能使用element.style.left
div {
            width: 100px;
            height: 100px;
            background-color: pink;
            position: absolute;
            left: 0;
        }
   var div = document.querySelector("div");
      var timer=  setInterval(function(){
            if(div.offsetLeft>=400){
                // 停止动画 本质是停止定时器
                clearInterval(timer);

            }
            div.style.left= div.offsetLeft+1+"px";
        },30)
       

动画函数的简单封装

    简单动画函数封装obj目标对象target 目标位置

    给不同的元素指定了不同的定时器
  div {
            width: 100px;
            height: 100px;
            background-color: pink;
            position: absolute;
            left: 0;
            overflow: hidden;
        }
        span{
            position: absolute;
            left: 0;
            top: 200px;
            display: block;
            width: 150px;
            height: 150px;
            background-color: aqua;
        }
  <button>点击夏雨荷才走</button>
    <div></div>
    <span>夏雨荷</span>
 
     // 简单动画函数封装obj目标对象target 目标位置
        // 给不同的元素指定了不同的定时器
       
          
        
function animate(obj,traget){
    // 当我们不断的点击按钮 这个元素的速度会越来越快,因为开启了太多的定时器
    // 解决方案 让我们元素只有一个定时器
    // 先清除以前的定时器 只保留当前的定时器执行
    clearInterval(obj.timer);
    obj.timer=setInterval(function(){
        
                obj.style.left=obj.offsetLeft+1+"px";
                if(obj.offsetLeft>=traget){
                    // 停止动画,本质是停止定时器
                    clearInterval(obj.timer);
                }
            },30)
}
var div=document.querySelector("div");
var span=document.querySelector("span");
var btn=document.querySelector("button");
// 调用函数
animate(div,200);
btn.addEventListener("click",function(){
    animate(span,200);
})

缓动动画原理:

   1.让盒子每次移动的距离慢慢变小,速度就会慢慢落下来.

   2.核心算法︰(目标值-现在的位置)/ 10做为每次移动的距离步长

   3.停止的条件是:让当前盒子位置等于目标位置就停止定时器
  div {
            width: 100px;
            height: 100px;
            background-color: pink;
            position: absolute;
            left: 0;
            margin-top: 200px;
        }
 <div></div>
    <button class="btn500">点击盒子到500</button>
    <button class="btn800">点击盒子到800</button>
var div=document.querySelector("div");

function aminte(obj,traget){
    clearInterval(obj.timer)
    obj.timer=setInterval(function(){
        // 步长值写在定时器里面
        // 把我们步长值该为整数向上取整
        // var step=Math.ceil((traget-obj.offsetLeft)/10);
        var step=(traget-obj.offsetLeft)/10
       step= step>0? Math.ceil(step):Math.floor(step);

    obj.style.left=obj.offsetLeft+step+"px";
    if(obj.offsetLeft>=trager){
        // 停止动画,本质是停止定时器
        clearInterval(obj.timer)
    }
},15);

}
var btn500=document.querySelector(".btn500");
var btn800=document.querySelector(".btn800");
btn500.addEventListener("click",function(){
    // 调用函数
    aminte(div,500)
})

btn800.addEventListener("click",function(){
    // 调用函数
    aminte(div,800)
})
// l.匀速动画就是   盒子是当前的位置 + 固定的值10

// 2.缓动动画就是  盒子当前的位置 + 变化的值((目标值-现在的位置)/10)


本文转载自: https://blog.csdn.net/helongzhi/article/details/125487500
版权归原作者 我拿青春赌未来~ 所有, 如有侵权,请联系我们删除。

“JavaScript动画”的评论:

还没有评论