gpt4 book ai didi

javascript - 由于 JavaScript 延迟错误,图像 slider 无法工作

转载 作者:行者123 更新时间:2023-11-28 03:32:07 25 4
gpt4 key购买 nike

下面是我的图像 slider 代码:

var slideIndex = 0;
var slides = document.getElementsByClassName("mySlides");
showSlides();
function showSlides() {
var i;
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
slideIndex++;
if (slideIndex> slides.length) {slideIndex = 1}
slides[slideIndex-1].style.display = "block";
setTimeout(showSlides, 3000); // Change image every 5 seconds
}
function currentSlide(no) {
var i;
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
slideIndex = no;
slides[no-1].style.display = "block";
}
function plusSlides(n) {
var newslideIndex = slideIndex + n;
if(newslideIndex < 4 && newslideIndex > 0){
currentSlide(newslideIndex);
}
}

显示图像后,每个图像之间会有 3 秒的延迟。我可以单击按钮来获取特定图像。这里发生的情况是图像之间的延迟不会重新启动,有时我会在半秒内显示 2 个图像,而不是 3 个。

我该如何解决这个问题?

<button class="w3-button w3-black w3-display-left" onclick="plusSlides(-1)">&#10094;</button>
<button class="w3-button w3-black w3-display-right" onclick="plusSlides(1)">&#10095;</button>
<br>
<div style="text-align:center">
<span class="dot" onclick="currentSlide(1)"></span>
<span class="dot" onclick="currentSlide(2)"></span>
<span class="dot" onclick="currentSlide(3)"></span>

这些是我的按钮。

最佳答案

即使您单击现有的按钮,从 showSlides 函数调用的超时也会继续自行计时。您必须在单击时手动重置它。为此,您需要执行以下操作:

  1. 声明一个类似于 slideIndex 的变量,用于保存超时引用。该变量需要由 showSlidescurrentSlide 访问:
var timeout = null;
  • 将超时引用存储在该变量中:
  • function showSlides() {    
    // rest of the code...

    timeout = setTimeout(showSlides, 3000);
    }
  • 清除超时并在点击处理程序中重置:
  • function currentSlide(no) {
    // rest of the code...

    clearTimeout(timeout);
    timeout = setTimeout(showSlides, 3000);
    }

    这样,超时将一直运行,直到达到 3 秒或单击其中一个按钮,这也将重置它并触发另一个周期。

    关于javascript - 由于 JavaScript 延迟错误,图像 slider 无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58087710/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com