[关闭]
@FarmerZ 2016-06-07T08:23:50.000000Z 字数 995 阅读 796

js中配合使用setInterval和setTimeout完成图片走停效果

let's do something

图片走停效果/或者说走马灯效果

图片走停效果因该是走马灯效果的升级版,而且制作难度上也是稍微增加的。如果使用jQuery会很容的做出来,但是如果使用setInterval和setTimeout二者结合来做的话则需要一些技巧。

我个人虽然做了出来,但是仍是有些疑问。
要求:

使用几个图片做成一个横向的果冻效果,这个滚动要求在每个图片走完后整体滚动停止两秒钟。

code

  1. var distance = 1;
  2. var interval;
  3. var timeout;
  4. startTurn();
  5. var turn = document.getElementsByClassName('products')[0];
  6. turn.onmouseover = function(){stopTurn()};
  7. turn.onmouseout = function(){startTurn()};
  8. function turnLeft() {
  9. if(distance % 163 == 0) {//如果一个图片走完之后,则会停止两秒再执行,原理是此时interval此时已不存在
  10. stopTurn();
  11. timeout = setTimeout(startTurn,2000);//清除interval,使滚动能够出现暂停效果。
  12. }
  13. if (distance == 978) distance = 1;
  14. turn.scrollLeft = distance;
  15. distance++;
  16. }
  17. function stopTurn() {
  18. clearInterval(interval);
  19. clearTimeout(timeout);//这个也是要清除的,不然在几秒钟过后会出问题
  20. }
  21. function startTurn() {
  22. interval = setInterval(turnLeft, 50);
  23. }
  24. //事实证明,即使在setInterval中设置的重新在此执行程序的时间小于程序执行需要的时间,程序
  25. //也会在执行完之后在执行Interval
要点

代码中使用了window对象中的setInterval和setTimeout方法,setTimeout用来停止前者,代码之所以能够安全的运行并不出现错误,在于setTimeout调用清除Interval,这样的话,在每次interval调用turnLeft方法时,此时的他本身就不存在了。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注