【问题标题】:How do i use setInterval for a carousel?我如何将 setInterval 用于轮播?
【发布时间】:2021-11-14 09:56:37
【问题描述】:

我正在尝试使用 setInterval 函数让我的轮播自动播放,但我一直没有运气。

我尝试在最后调用 setInterval 函数中的轮播函数,但它不起作用..我做错了什么?

这里是沙盒 https://codesandbox.io/s/slider-7ph05?file=/src/index.js

这是我的 JS 代码:

const slides = document.querySelectorAll(".slide");
const prevBtn = document.querySelector(".prevBtn");
const nextBtn = document.querySelector(".nextBtn");

// Inline callback function
// forEach(function(element, index, array){ ... })
slides.forEach(function (slide, index) {
  slide.style.left = `${index * 100}%`;

  // console.log(slide);
  // console.log(index);
  // console.log(array);
});

let count = 0;
nextBtn.addEventListener("click", function () {
  count++;
  carousel();
});

prevBtn.addEventListener("click", function () {
  count--;
  carousel();
});

function carousel() {
  slides.forEach(function (slide) {
    if (count > slides.length - 1) {
      count = 0;
    }
    if (count < 0) {
      count = slides.length - 1;
    }

    slide.style.transform = `translateX(-${count * 100}%)`;
    // console.log(slides.length);
    // console.log(slide);
    // console.log(count);
  });
}

setInterval(carousel, 3000);

【问题讨论】:

    标签: javascript carousel setinterval


    【解决方案1】:

    当按下下一个或上一个按钮时,您似乎没有像您那样增加setInterval 中的count 变量,也没有像您一样调用carousel 函数。 更新您的 setInterval 以增加计数器并调用 carousel 函数。

    setInterval(()=>{
    count++ //increment the counter
    carousel() //call the function
    }, 3000);
    

    您的索引文件应如下所示:

    const slides = document.querySelectorAll(".slide");
    const prevBtn = document.querySelector(".prevBtn");
    const nextBtn = document.querySelector(".nextBtn");
    
    // Inline callback function
    // forEach(function(element, index, array){ ... })
    slides.forEach(function (slide, index) {
      slide.style.left = `${index * 100}%`;
    
      // console.log(slide);
      // console.log(index);
      // console.log(array);
    });
    
    let count = 0;
    nextBtn.addEventListener("click", function () {
      count++;
      carousel();
    });
    
    prevBtn.addEventListener("click", function () {
      count--;
      carousel();
    });
    
    function carousel() {
      slides.forEach(function (slide) {
        if (count > slides.length - 1) {
          count = 0;
        }
        if (count < 0) {
          count = slides.length - 1;
        }
    
        slide.style.transform = `translateX(-${count * 100}%)`;
        // console.log(slides.length);
        // console.log(slide);
        // console.log(count);
      });
    }
    
    setInterval(()=>{
      count++
      carousel()
    }, 3000);
    

    【讨论】:

    • 哦,谢谢它有效!我认为在 setInterval 中调用函数不需要 ()
    • 跳过() 意味着您只指向一个应该由其他函数处理(调用)的函数,更像是一个回调。但是在这里,在这种情况下,没有其他函数调用caraousel,它需要在每个时间间隔调用,因此括号()是强制性的。
    猜你喜欢
    • 1970-01-01
    • 2022-07-05
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    相关资源
    最近更新 更多