<tfoot id='MMY27'></tfoot>

    <bdo id='MMY27'></bdo><ul id='MMY27'></ul>

    <small id='MMY27'></small><noframes id='MMY27'>

    1. <i id='MMY27'><tr id='MMY27'><dt id='MMY27'><q id='MMY27'><span id='MMY27'><b id='MMY27'><form id='MMY27'><ins id='MMY27'></ins><ul id='MMY27'></ul><sub id='MMY27'></sub></form><legend id='MMY27'></legend><bdo id='MMY27'><pre id='MMY27'><center id='MMY27'></center></pre></bdo></b><th id='MMY27'></th></span></q></dt></tr></i><div id='MMY27'><tfoot id='MMY27'></tfoot><dl id='MMY27'><fieldset id='MMY27'></fieldset></dl></div>
    2. <legend id='MMY27'><style id='MMY27'><dir id='MMY27'><q id='MMY27'></q></dir></style></legend>

        JS div匀速移动动画与变速移动动画代码实例

        时间:2023-12-08

        <small id='asYEi'></small><noframes id='asYEi'>

      1. <legend id='asYEi'><style id='asYEi'><dir id='asYEi'><q id='asYEi'></q></dir></style></legend>
        <i id='asYEi'><tr id='asYEi'><dt id='asYEi'><q id='asYEi'><span id='asYEi'><b id='asYEi'><form id='asYEi'><ins id='asYEi'></ins><ul id='asYEi'></ul><sub id='asYEi'></sub></form><legend id='asYEi'></legend><bdo id='asYEi'><pre id='asYEi'><center id='asYEi'></center></pre></bdo></b><th id='asYEi'></th></span></q></dt></tr></i><div id='asYEi'><tfoot id='asYEi'></tfoot><dl id='asYEi'><fieldset id='asYEi'></fieldset></dl></div>

        • <bdo id='asYEi'></bdo><ul id='asYEi'></ul>
          <tfoot id='asYEi'></tfoot>
            <tbody id='asYEi'></tbody>

                  关于JS div匀速移动动画与变速移动动画代码实例,我为你提供以下攻略。

                  1. 匀速移动动画

                  匀速移动动画的实现方法常见的有两种方式:

                  (1)通过定时器 setInterval() 不断执行移动过程

                  function moveBySetInterval(ele, speed) {
                      clearInterval(ele.timerId);
                      ele.timerId = setInterval(function() {
                          var left = ele.offsetLeft + speed;
                          ele.style.left = left + "px";
                      }, 20);
                  }
                  

                  该函数实现了当传入元素ele和速度speed之后,不断地将元素向右移动。其中,setInterval() 是定时器函数,通过将 setInterval() 返回的ID存储在元素上,可以方便后续调用 clearInterval() 来停止定时器,比如在动画结束时调用 clearInterval()。

                  (2)通过递归调用自身实现

                  function moveByTimeout(ele, target, step) {
                      var left = ele.offsetLeft;
                      if (left == target) {
                          return;
                      }
                      if (left < target) {
                          step = Math.abs(step);
                      } else {
                          step = -Math.abs(step);
                      }
                      ele.style.left = left + step + "px";
                      setTimeout(function() {
                          moveByTimeout(ele, target, step);
                      }, 20);
                  }
                  

                  该函数实现了通过计算元素的当前位置和目标位置之间的差值,来确定元素的移动方向和移动距离。通过不断递归调用自身,并在每次回调中改变元素的位置,来实现元素的移动。setTimeout() 是定时器函数,通过将 setTimeout() 返回的ID存储在函数内部的变量中,可以方便后续调用 clearTimeout() 来停止定时器,比如在动画结束时调用 clearTimeout()。

                  2. 变速移动动画

                  变速移动动画通常是通过缓动函数来实现的,缓动函数可以按照预设的规则调整元素在动画过程中的移动速度,以达到更加自然、顺畅的效果。其中,常见的缓动函数有:线性、加速、减速、弹性等等。

                  以实现简单的弹性动画为例:

                  function elasticEaseInOut(pos) {
                      if (pos == 0 || pos == 1) {
                          return pos;
                      }
                      var c = 0.3, // 抖动幅度
                          t = 1 - pos,
                          b = 1 - Math.pow(c, 10 * t),
                          d = 1;
                      return 1 - b;
                  }
                  
                  function moveByElastic(ele, target, duration) {
                      var left = ele.offsetLeft,
                          distance = target - left,
                          speed = 0,
                          start = Date.now();
                      (function step() {
                          var timePassed = Date.now() - start,
                              progress = Math.min(timePassed / duration, 1),
                              pos = elasticEaseInOut(progress);
                          if (pos == 1) {
                              clearInterval(ele.timerId);
                          } else {
                              speed = pos * distance - ele.offsetLeft;
                              ele.style.left = ele.offsetLeft + speed + "px";
                              setTimeout(step, 20);
                          }
                      })();
                  }
                  

                  该函数实现了一个简单的弹性缓动函数(elasticEaseInOut),该弹性函数用于计算元素在动画过程中的速度系数。在 moveByElastic() 函数中,通过计算元素当前位置和目标位置之间的距离和时间差,来确定移动速度,并通过不断调用 setTimeout() 来实现元素的移动。其中,speed 属性是根据弹性函数(elasticEaseInOut)计算得出的移动速度,进而用于改变元素位置。通过使用弹性函数,在元素移动的时候,在不同的位置上增加抖动幅度,让移动看起来更加自然。

                  以上是JS div匀速移动动画与变速移动动画代码实例的攻略,希望对你有所帮助。

                  上一篇:JavaScript Canvas实现兼容IE的兔子发射爆破动图特效 下一篇:js判断浏览器是否支持严格模式的方法

                  相关文章

                  <tfoot id='nzJ7U'></tfoot>
                  <i id='nzJ7U'><tr id='nzJ7U'><dt id='nzJ7U'><q id='nzJ7U'><span id='nzJ7U'><b id='nzJ7U'><form id='nzJ7U'><ins id='nzJ7U'></ins><ul id='nzJ7U'></ul><sub id='nzJ7U'></sub></form><legend id='nzJ7U'></legend><bdo id='nzJ7U'><pre id='nzJ7U'><center id='nzJ7U'></center></pre></bdo></b><th id='nzJ7U'></th></span></q></dt></tr></i><div id='nzJ7U'><tfoot id='nzJ7U'></tfoot><dl id='nzJ7U'><fieldset id='nzJ7U'></fieldset></dl></div>
                    <bdo id='nzJ7U'></bdo><ul id='nzJ7U'></ul>
                  <legend id='nzJ7U'><style id='nzJ7U'><dir id='nzJ7U'><q id='nzJ7U'></q></dir></style></legend>
                1. <small id='nzJ7U'></small><noframes id='nzJ7U'>