简单动画案例封装

style代码

<style>
    *{
      margin:0;
      padding:0;
    }
    div{
      width: 100px;
      height: 100px;
      background-color: red;
      position:absolute;
    }
  </style>

 

盒子代码

<button id="btn">点击让box从0移动到400</button>
<button id="btnBack">点击让box从400移动到0</button>
<div id="box"></div>

script代码

<script>
  //1. 点击按钮,让box从0移动到400
  //  给btn注册点击事件,在事件处理函数中,让box的left值缓慢的变成400(在定时器中,获取当前位置,在当前位置的基础上,加几个像素)
  //  1.1  获取元素 btn box
  var btn = document.getElementById('btn');
  var box = document.getElementById('box');
  var btnBack = document.getElementById('btnBack');
//  var timeid; //用于存储定时器的id
  //  1.2  给btn注册点击事件
  btn.onclick = function(){
    animate(box,400,7);
  }
  
  //2. 点击btnBack,让box从400缓慢回到0
  //    给btnBack注册点击事件,在事件处理函数中,让box缓慢的回到0(定时器中的回调函数里面获取当前位置,在当前位置的基础上减去几个像素)
  //  2.1 获取元素 btnBack

  //  2.2 给btnBack注册点击事件
  btnBack.onclick = function(){
   animate(box, 0, 3);
  }
  
  
  
  
  //封装 按钮事件处理函数中的代码(让一个元素,从左往右,或者从右往左缓慢移动)
  /*
  * 作用: 让一个元素,从左往右,或者从右往左缓慢移动
  * element: 要求传入一个元素  元素
  * target : 元素移动的目标位置  数字
  * step: 步进(每次元素移动的距离)
  * */
  
  function animate(element, target, step){
    
//    清除定时器
    if(element.timeid){
      clearInterval(element.timeid);
    }
    
//    1. 设置定时器
     element.timeid =  setInterval(function(){
//        2. 获取元素的当前位置
        var current = element.offsetLeft;
//        3. 根据当前位置加上/减去我们的步进
//         如果当前位置大于目标位置,就是减去步进.否则就是加上步进
          if(current > target){
//            证明是从右往左,应该减去step
            var pos = current - step;
          }else{
          // 证明是从左往右,应该加上step
            var pos = current + step;
          }
  
       //          4. 给element赋值新的位置
          element.style.left = pos + 'px';
          
//          5. 判断是否到达目标位置,如果到达目标位置就停下来
//          5.1 如何判断已经到达目标位置
//              如果 当前位置(赋值之后的位置 pos)- 目标位置 的差值绝对值,小于步进,证明马上要到目标位置了
            if(Math.abs(pos - target) <= step){
              //证明马上就要到达目标位置了
//              5.2  清除定时器,直接把目标位置给元素
              clearInterval(element.timeid);
              element.style.left = target + 'px';
            }
   
      }, 15);
  }
</script>

 

 

 

盒子代码

<button id="btn">点击让box从0移动到400,到达400之后,自动回到0</button>

<div id="box"></div>

script代码

<script>
  //1. 点击按钮,让box从0移动到400
  //  给btn注册点击事件,在事件处理函数中,让box的left值缓慢的变成400(在定时器中,获取当前位置,在当前位置的基础上,加几个像素)
  //  1.1  获取元素 btn box
  var btn = document.getElementById('btn');
  var box = document.getElementById('box');
 
  btn.onclick = function(){
    animate(box, 400, 7, function(){
      animate(box, 0, 7);
    });
   
   
  }
  
//  console.log(1);
//  setTimeout(function(){
//    console.log(2);
//  },0);
//  console.log(3);
  
  
  
  //封装 按钮事件处理函数中的代码(让一个元素,从左往右,或者从右往左缓慢移动)
  /*
   * 作用: 让一个元素,从左往右,或者从右往左缓慢移动
   * element: 要求传入一个元素  元素
   * target : 元素移动的目标位置  数字
   * step: 步进(每次元素移动的距离)
   * callback : 回调函数  到达目标位置之后,会被调用
   * */
  
  function animate(element, target, step, callback){

//    清除定时器
    if(element.timeid){
      clearInterval(element.timeid);
    }

//    1. 设置定时器
    element.timeid =  setInterval(function(){
//        2. 获取元素的当前位置
      var current = element.offsetLeft;
//        3. 根据当前位置加上/减去我们的步进
//         如果当前位置大于目标位置,就是减去步进.否则就是加上步进
      if(current > target){
//            证明是从右往左,应该减去step
        var pos = current - step;
      }else{
        // 证明是从左往右,应该加上step
        var pos = current + step;
      }
      
      //          4. 给element赋值新的位置
      element.style.left = pos + 'px';

//          5. 判断是否到达目标位置,如果到达目标位置就停下来
//          5.1 如何判断已经到达目标位置
//              如果 当前位置(赋值之后的位置 pos)- 目标位置 的差值绝对值,小于步进,证明马上要到目标位置了
      if(Math.abs(pos - target) <= step){
        //证明马上就要到达目标位置了
//              5.2  清除定时器,直接把目标位置给元素
        clearInterval(element.timeid);
        element.style.left = target + 'px';
        //判断用户有没有传第四个参数,如果传了就调用,如果没传就不调用
//        如果传入了函数,callback转换成布尔就是true,如果什么都没传,callback转换成布尔,就是false
        if(callback){
          callback();
        }
        
        
      }
        
      
    }, 15);
  }


</script>

 

 

posted @ 2019-11-15 23:58  handsomehe  阅读(199)  评论(0编辑  收藏  举报