javascript - 当我们使用 JavaScript 单击下一个或上一个按钮时,图像幻灯片计时器速度会增加

标签 javascript html image slider

我使用 JavaScript 编写了简单的图像 slider 。我设置了 5000 毫秒计时器来自动滑动。但当我们单击下一个或上一个按钮时,它会增加。我已经粘贴了下面的代码

HTML 代码:

    <section id="intro">
        <div id="prev"><br/><br/><br/><br/><img onclick="rotateImages(0);" src="./images/slider/prev1.png"/></div>
        <div id="next"><img onclick="rotateImages(1);" src="./images/slider/next1.png"/></div>
    </section>

JavaScript 代码:

    <script type="text/javascript">

        var num = 0;
        var temp = 0;
        var speed = 5000;
        var preloads = [];

        preload(
                '1.png',
                '2.jpg',
                '3.jpg',
                '4.jpg',
                '5.png'
                );

        function preload() {

            for (var c = 0; c < arguments.length; c++) {
                preloads[preloads.length] = new Image();
                preloads[preloads.length - 1].src = arguments[c];
            }
        }

        function rotateImages(flag) {
            if (flag == 0)
            {
                num = num - 1;
                if (num < 0)
                    num = preloads.length;
            }
            else
            {
                num = num + 1;
                if (num >= preloads.length)
                    num = 0;
            }
            if (num == temp) {
                rotateImages(1);
            } else {
                var str = preloads[num].src;
                var resArr = str.split("/");
                var picName = resArr[resArr.length - 1];
                document.getElementById("intro").style.backgroundImage = 'url(./images/slider/' + picName + ')';
                temp = num;
                setTimeout(function () {
                    rotateImages(1)
                }, speed);
            }
        }

        if (window.addEventListener) {
            window.addEventListener('load', function () {
                setTimeout(function () {
                    rotateImages(1)
                }, speed)
            }, false);
        } else {
            if (window.attachEvent) {
                window.attachEvent('onload', function () {
                    setTimeout(function () {
                        rotateImages(1)
                    }, speed)
                });
            }
        }
    </script>

最佳答案

您需要清除之前的计时器。否则,每次调用rotateImages()时都会添加新的计时器,保存从setTimeout()返回的引用,然后使用clearTimeout()清除计时器(如果已设置)

var num = 0;
var temp = 0;
var speed = 5000;
var preloads = [];
var timeout;

preload(
  '1.png',
  '2.jpg',
  '3.jpg',
  '4.jpg',
  '5.png'
);

function preload() {

  for (var c = 0; c < arguments.length; c++) {
    preloads[preloads.length] = new Image();
    preloads[preloads.length - 1].src = arguments[c];
  }
}

function rotateImages(flag) {
  if (flag == 0) {
    num = num - 1;
    if (num < 0)
      num = preloads.length;
  } else {
    num = num + 1;
    if (num >= preloads.length)
      num = 0;
  }
  if (num == temp) {
    rotateImages(1);
  } else {
    var str = preloads[num].src;
    var resArr = str.split("/");
    var picName = resArr[resArr.length - 1];
    document.getElementById("intro").style.backgroundImage = 'url(./images/slider/' + picName + ')';
    temp = num;

    if (!!timeout) {
      clearTimeout(timeout);
    }
    timeout = setTimeout(function() {
      rotateImages(1);
    }, speed);
  }
}

if (window.addEventListener) {
  window.addEventListener('load', function() {
    setTimeout(function() {
      rotateImages(1)
    }, speed)
  }, false);
} else {
  if (window.attachEvent) {
    window.attachEvent('onload', function() {
      setTimeout(function() {
        rotateImages(1)
      }, speed)
    });
  }
}

关于javascript - 当我们使用 JavaScript 单击下一个或上一个按钮时,图像幻灯片计时器速度会增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36370709/

相关文章:

java - Android - 在移动存储上保存位图图像而不压缩

javascript - Bootstrap 下拉菜单无法正常工作

javascript - Webpack 2 非内联源 map 未在 chrome 中显示

Javascript:textContent 和 getElementsByTagName 在我的代码中不起作用

javascript - 如何摆脱图表下方的空间?

image - 可以使用一个多文件选择输入使用回形针上传多个文件吗?

C++ libPng 写一个透明背景的PNG

javascript - 通过常量创建纯组件 - javascript 还是通过 React?

javascript - 使用 jQuery $.each 与 Json 错误,有 1 个结果

jquery - 如何获取前面元素的html