首页 > web前端 > js教程 > 正文

JavaScript如何使用setTimeout来实现轮循动画的实例详解

黄舟
发布: 2018-05-11 14:08:42
原创
3073人浏览过

本文实例为大家分享了settimeout实现轮循动画的具体代码,供大家参考,具体内容如下

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <p id='box'></p>
  <script>
    var oBox = document.getElementById("box");
    var maxLeft = utils.win('clientWidth')-oBox.offsetWidth;
    var step = 5;
    var timer = null;
    //使用递归思想完成setTimeout的轮循动画:每一次在执行动画之前把上一次设置没用的定时器清除掉,节约我们的内存空间
    function move(){
      window.clearTimeout(timer);
      var curLeft = utils.css(oBox,"left");
      if(curLeft+step >= maxLeft){//边界判断
        utils.css(oBox,"left",maxLeft);
        return;
      }
      curLeft+=step;
      utils.css(oBox,"left",curLeft);
      timer = window.setTimeout(move,10)
    }
    move();

  </script>
</body>
</html>
登录后复制

一直以为动画效果是用setInterval来执行的。也比较好理解,一直执行下去,直到条件再次出现时清除setInterval。

这几天看了用setTimeout来做动画的例子,起初我是不理解的。动画和延迟执行有毛关系(其实是有关系的,后面会讲到。)代码是这样子的:

for ( i=0; i<200; i++){
    setTimeout ( function(){
        var left = el.style.left ? el.style.left : 0;
        left = parseInt( left ) +1;
        el.style.left = left+ "px";
    } , i );
}
登录后复制

代码就是以上样子的啦。我当时所不理解的是,为什么每次都要延迟的时间递增?为什么刚好到200px就停止执行了,i明明是时间,为什么和距离的值一样?

立即学习Java免费学习笔记(深入)”;

首先回答第一个问题,

for循环其实是动画的关键,仅仅执行setInterval 只会使物体位移一次。可以先分析代码:当i为0的时候,物体移动1px,当 i 为1的时候,left为2px, 延迟了1毫秒。。。。当i为99的时候,left为100px,延迟99毫秒执行。。。当i为199的时候,left为200px,延迟199毫秒执行。。。延迟的时间与物体的移动呈递增状态。

来画数字人直播
来画数字人直播

来画数字人自动化直播,无需请真人主播,即可实现24小时直播,无缝衔接各大直播平台。

来画数字人直播 0
查看详情 来画数字人直播

所以,从单方面看,延迟和动画没有必然关系。但是从连续的角度(for循环起了作用),根据我们的视觉暂留,就形成了动画,用张图来表示:

1756.png

循环起来,就形成了动画效果。

第二个问题:

当动画结束时,恰巧距离是200,这和i有什么关系呢?其实没有直接关系。只是当i自增1的时候,left也恰好是自增i,如果将left的值每次都加3,那么看到的就是不一样的结果了。(最终应该是600,还是有关系的,因为循环了200次)。

以上就是JavaScript如何使用setTimeout来实现轮循动画的实例详解的详细内容,更多请关注php中文网其它相关文章!

相关标签:
java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号