javascript - 幻灯片故障排除(计时器和动画)

标签 javascript html css animation slideshow

我正在尝试使用 html、css 和纯 javascript 完全从头开始创建幻灯片,但我不知道该怎么做,所以当我单击其中一个幻灯片指示器时,setInterval() 会重置其计时器(按顺序能够在不直接切换到下一张的情况下更改幻灯片,因为例如,只剩下 1 秒)

我曾尝试使用 clearInterval() 重置计时器,然后重新激活 setInterval() 但是当我点击其中一个幻灯片指示器时,幻灯片开始随机变化(它们不遵循 6000ms 计时器SetInterval() 出于某种原因)。

var slides = document.querySelectorAll(".slide");
var dots = document.querySelectorAll(".dot");

function removeClass() {
  for (var i = 0; i < slides.length; i++) {
    slides[i].classList.remove('active');
  }
}

function removeNext() {
  for (var i = 0; i < slides.length; i++) {
    slides[i].classList.remove('next');
  }
}

function slideshow() {
    currentSlide = document.querySelector(".active");
    nextSlide = currentSlide.nextElementSibling;
    if (nextSlide != null) {
        removeClass();
        nextSlide.classList.add('next');
        nextSlide.classList.add('active');
    } else {
        removeClass();
        slides[0].classList.add('next');
        slides[0].classList.add('active');
    }
    removeNext();
}

var slideDelay = setInterval(slideshow, 6000);

document.addEventListener("click", function(event){
    if (event.target.className == "dot") {
        removeClass();
        var dotAttrValue = event.target.getAttribute('data-slide-to');
        slides[dotAttrValue-1].classList.add('active');
        clearInterval(slideDelay);  
        var slideDelay = setInterval(slideshow, 6000);
    }
});

最佳答案

有两个 var 声明会创建两个单独的间隔。只需摆脱第二个,您就可以开始了。

var slides = document.querySelectorAll(".slide");
var dots = document.querySelectorAll(".dot");

function removeClass() {
    for (var i = 0; i < slides.length; i++) {
        slides[i].classList.remove('active');
    }
}

function removeNext() {
    for (var i = 0; i < slides.length; i++) {
        slides[i].classList.remove('next');
    }
}

function slideshow() {
    currentSlide = document.querySelector(".active");
    nextSlide = currentSlide.nextElementSibling;
    if (nextSlide != null) {
        removeClass();
        nextSlide.classList.add('next');
        nextSlide.classList.add('active');
    } else {
        removeClass();
        slides[0].classList.add('next');
        slides[0].classList.add('active');
    }
    removeNext();
}

var slideDelay = setInterval(slideshow, 6000);

document.addEventListener("click", function (event) {
    if (event.target.className == "dot") {
        removeClass();
        var dotAttrValue = event.target.getAttribute('data-slide-to');
        slides[dotAttrValue - 1].classList.add('active');
        clearInterval(slideDelay);
        slideDelay = setInterval(slideshow, 6000);//Var removed from here.
    }
});

关于javascript - 幻灯片故障排除(计时器和动画),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55652257/

相关文章:

html - 将位于 WebContent 文件夹中的图像放置在 HTML 中的 H2 标签中

javascript - jQuery 从表格中获取单元格值

javascript - Axios 在单击按钮后调用时断开用户操作接下来发生的事情

javascript - 使用 Flask 在单页应用程序中提交表单而无需重新加载

javascript - 为什么jQuery只在部分链接进入函数?

javascript - Twitter、Instagram 或 Facebook 等网络平台如何允许其他网站嵌入其内容?

html - 如何为我的 ul 中的一个 li 添加不同的边距?

javascript - 禁用 Javascript 的搜索引擎机器人和元刷新

html - CSS垂直图像定位

javascript - 如何在伪元素上使用 AOS 动画?