javascript - jquery焦点图自动切换开始是正常的,一段时间就乱了
伊谢尔伦
伊谢尔伦 2017-04-10 15:09:46
[JavaScript讨论组]

写了一个随机图片的自动切换代码,每次运行一会儿就不正常了。主要代码如下

http://codepen.io/alianlian/pen/PqwejG

主要原理是先添加一张随机图片,然后p里面就会有两张,然后同时向上移动100px,之后再将第一个图片删除,去掉第二个图片的translate属性。
最开始是正常的,大概一分钟后就乱了,看了一下,是因为到后来删除img没有执行。

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
ringa_lee

不跑代码纯猜测的话,感觉是定时处理的东西太多了,每次执行的时间可能并不那么精确,久而久之就错乱了

2个同时向上移动可以修改用父元素的scrollTop的方法在一个animate里面做,然后在这个animate的complete里面用setTimeout调用自己,取代开头的setInterval,这样能保证次第完成

伊谢尔伦

通过观察它的dom结构变化,发现img的数量在某些时刻会一直增加,而不是一直保持两个。
这说明在一个interval的执行过程中(240ms),两个animate的complete函数并没有真正执行。
个人建议:将animate的180改小,或者把interval的240改大试试看。

更新:
如果你将浏览器的标签切到另外一个再回来,会发现立刻出错。
我将js代码修改了一下一遍测试:

setInterval(function(){
  $(".image-wrapper").append('<img src="http://qingvoice-song-pics.qiniudn.com/101039.jpg?imageView2/2/w/200/h/200">');
  $('.image-wrapper').find('img:first-child').animate({
    "transform": "translate(0px, -100px)"
  }, {duration: 180, complete: function() { 
        $(this).remove(); 
        console.log("remove complete: " + (new Date()).getTime());} 
  });
  $('.image-wrapper').find('img:last-child').animate({
    "transform": "translate(0px, -100px)"
  }, {duration: 180, complete: function(){ 
        $(this).removeAttr('style');
        console.log("scrollUp complete: " + (new Date()).getTime());}
  });

// 输出当前时间戳
console.log((new Date()).getTime());

},'1000');

控制台结果如下:

可以看到在tab切走的时候,两次interval的duration超过1000ms。而且interval内容的执行和complete函数的执行完全被打乱。
我的猜测:当tab切走时,浏览器的线程会发生一定改变导致原本正常运行的interval不再按原来的duration执行。
具体有关浏览器线程的问题我也没有深究。。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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