美文网首页
简单动画原理封装

简单动画原理封装

作者: 鱼香肉丝没有渔 | 来源:发表于2020-05-09 09:50 被阅读0次
       /*  动画原理
             1. 获得盒子当前的位置
             2. 让盒子在当前位置加上1个移动距离
             3. 利用定时器不断重复这个操作
             4. 加一个结束定时器的条件
             5. 注意此元素需要添加定位,才能使用element.style.left
             */
    
    
     //  获取元素
             var div = document.querySelector('div');
            //  div.offsetLeft+1   offsetLeft只能获取不能赋值
            // 改变值 必须通过style来赋值
            //  div.style.left = div.offsetLeft + 10 + 'px';
            
            // 使用定时器
            var time =  setInterval(()=>{
                 if(div.offsetLeft >= 400){
                        // 大与等于400停止定时器
                        clearInterval(time)
                 }
                div.style.left = div.offsetLeft + 1 + 'px';
             },30);
    
    div {
                   position: absolute;
                   left: 0;
                   width: 200px;
                   height: 200px;
                   background-color: red;
               }
    
    
    <div></div> 
    
    

    封装动画函数

    <body>
      <div></div> 
    
        <script>
    
            /*函数封装
            函数需要传递2个参数,动画对象和移动到的距离
             
            obj目标对象 target目标位置
            */
             function animate(obj,target){
             
                var time = setInterval(()=>{
                 if(obj.offsetLeft >= target){
                 
                        clearInterval(time)
                 }
                obj.style.left = obj.offsetLeft + 1 + 'px';
             },30);
             }
    
             var div = document.querySelector('div');
          
             // 调用函数
             animate(div,400);
        
        </script>
    </body>
    

    给不同的元素记录不同的定时器

    <style>
               div {
                   position: absolute;
                   left: 0;
                   width: 200px;
                   height: 200px;
                   background-color: red;
               }
               span {
                   position: absolute;
                   bottom: 200px;
                   width: 200px;
                   height: 200px;
                   background-color: pink;
               }
        </style>
    </head>
    <body>
      <div></div> 
      <span>下</span>
      <button>下走</button>
    
     function animate(obj,target){
                //  先把原先的定时器清除,清除完之后再开始一个新的
                 clearInterval(obj.time);
                /* 不使用var time两个好处第一个 1.避免var声明变量不在内存中开辟空间
                   2.每个元素都有自己专门的定时器*/
                obj.time = setInterval(()=>{
                 if(obj.offsetLeft >= target){
                        // time改成obj.time
                        clearInterval(obj.time)
                 }
                obj.style.left = obj.offsetLeft + 1 + 'px';
             },30);
             }
    
             var div = document.querySelector('div');
             var span = document.querySelector('span');
             var btn = document.querySelector('button')
             // 调用函数
             animate(div,400);
             
         
            // 有bug点击按钮越来越快
            // 解决方案让我们元素只有一个定时器执行
             btn.addEventListener('click',() => {
                animate(span,200);
             })
    
    image.png

    相关文章

      网友评论

          本文标题:简单动画原理封装

          本文链接:https://www.haomeiwen.com/subject/bzyhnhtx.html