Как включить несколько слайд-шоу javascript на одной странице?

#javascript #jquery

#javascript #jquery

Вопрос:

Я хочу создать несколько слайд-шоу на одной странице, однако в настоящее время это не работает

Я понимаю, что этот вопрос задавался раньше, но, похоже, я не могу заставить эти ответы работать с моим кодом, у кого-нибудь есть какие-либо предложения? У меня нет большого опыта работы с Javascript

 <div class="bareEditorial">

<div class="slideshow-container" onclick="plusSlides(1)">   

<div class="mySlides fade">
  <div class="image">
    <img src="bareEditorialHero.jpg">
  </div>
    </div>

<div class="mySlides fade">
    <div class="image">
    <img src="bareEditorial2.jpg">
  </div>
    </div>

<div class="mySlides fade">
    <div class="image">
    <img src="bareEditorial3.jpg">
  </div>
    </div>



<div class="ninetydegrees">     
<div class="nextprevious">

  <div class="numbertext">Bare Boutique Editorial 2018 (<span>1</span> / <span>6</span>)</div>
</div>
  

 var slideIndex = 1;
var indexes = document.querySelectorAll(".numbertext span");
var slides = document.getElementsByClassName("mySlides");
indexes[1].innerHTML = slides.length;

showSlides(slideIndex);

function plusSlides(n) {
  showSlides(slideIndex  = n);
}

function currentSlide(n) {
  showSlides(slideIndex = n);
}

function showSlides(n) {
var i;
if (n > slides.length) {
slideIndex = 1
}
if (n < 1) {
slideIndex = slides.length
}
indexes[0].innerHTML = slideIndex;
for (i = 0; i < slides.length; i  ) {
slides[i].style.display = "none";
}
slides[slideIndex - 1].style.display = "block";
}

$(function() {
  $('body').removeClass('fade-out');
});
  

Ответ №1:

Учитывая, что вам нужна информация о реализации нескольких слайд-шоу на странице и не вдаваться в подробности работы для каждого, я предлагаю вам иметь контейнер слайд-шоу с уникальным идентификатором для каждого слайд-шоу и вызывать свой метод инициализации для каждого, передавая идентификатор в качестве аргумента.

Создайте метод as initializeSlideshow(containerID) и в нем свяжите методы, например, с кнопкой next как

 function initializeSlideshow(containerID) {
    $('#'   containerID   '.prevLink').on('click', function() {} );
    //rest of your logic
}
  

Другим подходом было бы добавить класс в каждый контейнер и реализовать методы таким образом, чтобы вы захватывали соответствующий контейнер с помощью closest() DOM и управляли им

 $('.containerClass .prevLink').on('click', function() {
    $(this).closest('.containerClass').find('.slideCLass');
});
  

В идеальном сценарии следует написать код для реализации логики слайд-шоу в виде плагина, где вы можете просто сделать

 $('.slideshowContainer').initializeSlideshow( {
    //slideshow options.
})
  

Который может быть реализован как

 $.fn.initializeSlideshow = function(slideshowOptions) {
    //your logic where reference to this (object on which the method is called) is available
}
  

Комментарии:

1. Могу я попросить вас об огромном одолжении и продемонстрировать это на ручке? Я не совсем уверен, как это реализовать codepen.io/anon/pen/XQeGMZ

2. @glittergirl Я могу продемонстрировать, как создать метод плагина, но не реализовать логику слайд-шоу