javascript - 当有多个 slider 时,如何使用 JavaScript 定位特定 slider

标签 javascript

我的页面上有 3 个 slider ,我是一栋建筑,但我只是想知道仅针对事件 slider 的最佳方法,以便下面的 javascript 适用于所有 slider 。如果我禁用其他 2 个 slider ,一切似乎都工作正常。我第一次做这样的事情。 我猜我的 javascript 选择器可能需要更改一些内容才能使其正常工作。

感谢任何有关最佳前进方向的建议。

var sliderSlide = document.querySelectorAll('.slider__slide');
var nextSlide = document.querySelector('.slider__button--next');
var previousSlide = document.querySelector('.slider__button--previous');
var currentSlide = 0;
var currentSlideImg = 0;

//Reset slides
function resetSlides() {
  for (var s = 0; s < sliderSlide.length; s++) {
    sliderSlide[s].classList.remove('active');
  }
  for (var i = 0; i < sliderSlideImg.length; i++) {
    sliderSlideImg[i].classList.remove('active');
  }
}

//Start slides
function startSlide() {
  resetSlides();
  sliderSlide[0].classList.add('active');
  sliderSlideImg[0].classList.add('active');
}

//Previous slide
function slidePrevious() {
  resetSlides();
  sliderSlide[currentSlide - 1].classList.add('active');
  currentSlide--;
  sliderSlideImg[currentSlideImg - 1].classList.add('active');
  currentSlideImg--;
}

previousSlide.addEventListener('click', function() {
  if (currentSlide === 0 && currentSlideImg === 0) {
    currentSlide = sliderSlide.length;
    currentSlideImg = sliderSlideImg.length;
  }
  slidePrevious();
});

//Next slide
function slideNext() {
  resetSlides();
  sliderSlide[currentSlide + 1].classList.add('active');
  currentSlide++;
  sliderSlideImg[currentSlideImg + 1].classList.add('active');
  currentSlideImg++;
}

nextSlide.addEventListener('click', function() {
  if (currentSlide === sliderSlide.length - 1 && currentSlideImg === sliderSlideImg.length - 1) {
    currentSlide = -1;
    currentSlideImg = -1;
  }
  slideNext();
});
<div class="slider slider--1 active">
  <div class="slider__slide">
    <p class="slider__text">some text</p>
  </div>
  <div class="slider__slide">
    <p class="slider__text">some text</p>
  </div>
  <div class="slider__slide">
    <p class="slider__text">some text</p>
  </div>
  <div class="slider__buttons">
    <span class="slider__button--previous">Previous</span>
    <span class="slider__button--next">Next</span>
  </div>
</div>

<div class="slider slider--2">
  <div class="slider__slide">
    <p class="slider__text">some text</p>
  </div>
  <div class="slider__slide">
    <p class="slider__text">some text</p>
  </div>
  <div class="slider__slide">
    <p class="slider__text">some text</p>
  </div>
  <div class="slider__buttons">
    <span class="slider__button--previous">Previous</span>
    <span class="slider__button--next">Next</span>
  </div>
</div>

<div class="slider slider--3">
  <div class="slider__slide">
    <p class="slider__text">some text</p>
  </div>
  <div class="slider__slide">
    <p class="slider__text">some text</p>
  </div>
  <div class="slider__slide">
    <p class="slider__text">some text</p>
  </div>
  <div class="slider__buttons">
    <span class="slider__button--previous">Previous</span>
    <span class="slider__button--next">Next</span>
  </div>
</div>

最佳答案

您可以在 .slider 上创建循环,然后在每个项目上使用 querySelector,这样您就可以为每个 slider 添加变量

Array.from(document.querySelectorAll('.slider')).forEach(function(slider) {
    var sliderSlide = slider.querySelectorAll('.slider__slide');
    var nextSlide = slider.querySelector('.slider__buttons--next');
    var previousSlide = slider.querySelector('.slider__buttons--previous');
    ...
});

或者如果您更喜欢 for 循环:

var sliders = document.querySelectorAll('.slider');
for (var i = 0; i < sliders.length; ++i) {
   var slider = sliders[i];
   ...
}

关于javascript - 当有多个 slider 时,如何使用 JavaScript 定位特定 slider ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50608380/

相关文章:

javascript - 如何处理非平凡的表单输入? JSP 还是 Javascript?

javascript - OpenLayers 3 fitExtent 没有按预期工作

javascript - 使用AutoHotKey输出JavaScript?

javascript - 消息提醒不起作用

javascript - 判断号码所属的桶

javascript - 使用没有分页标记的 jQuery 无限滚动插件?

javascript - HTML 文档中的选择元素不显示

javascript - 单击“编辑”按钮不会在表格过滤器后更改页面上的 html

javascript - 我可以依赖元素的颜色吗?

javascript - 从另一个站点读取值