Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как перебирать содержимое одновременно? (https://javascript.ru/forum/jquery/65811-kak-perebirat-soderzhimoe-odnovremenno.html)

snovapavel 09.11.2016 06:23

Как перебирать содержимое одновременно?
 
Добрый день!

Есть слайдер, который перебирает, собственно, слайды:

<ul class="container">
  <li class="cell showing">Содержимое 1</li>
  <li class="cell">Содержимое 2</li>
  <li class="cell">Содержимое 3</li>
</ul>

  <br>
  <br>

<ul class="container">
  <li class="cell showing">Содержимое 1</li>
  <li class="cell">Содержимое 2</li>
  <li class="cell">Содержимое 3</li>
</ul>


С одним контейнером работает отлично, но, если добавить ещё один контейнер на страницу с другим содержимым, вместо того, чтобы листать содержимое этих двух контейнеров синхронно, он вначале пролистывает содержимое первого контейнера, а затем второго.

Как заставить их работать синхронно?

Сам код:

var slides = document.querySelectorAll('.container .cell');
var currentSlide = 0;
var slideInterval = setInterval(nextSlide,2000);

function nextSlide() {
    slides[currentSlide].className = 'cell';
    currentSlide = (currentSlide+1)%slides.length;
    slides[currentSlide].className = 'cell showing';
}


И можно ли избавиться от класса .showing?

Большое спасибо!

рони 09.11.2016 07:15

Цитата:

Сообщение от snovapavel
И можно ли избавиться от класса .showing?

и как "листать" без класса?
Цитата:

Сообщение от snovapavel
Как заставить их работать синхронно?

циклом по .container

snovapavel 09.11.2016 09:43

А как циклом? Он их по очереди листает. Сначала один контейнер ul потом второй, а синхронно оба не хочет

рони 09.11.2016 10:19

синхронизация слайдеров
 
snovapavel,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  li{
    display: none;
  }
 li.showing {
    display: block;
 }

  </style>

  <script>
window.addEventListener('DOMContentLoaded', function nextSlide() {
[].forEach.call( document.querySelectorAll('.container'), function(el) {
       var li = el.querySelector('.showing');
           li && li.classList.toggle('showing');
           li = li && li.nextElementSibling||el.querySelector('li');
           li.classList.toggle('showing');
});
window.setTimeout(nextSlide, 2000)
    });
  </script>
</head>

<body>
<ul class="container">
  <li class="cell">Содержимое 1</li>
  <li class="cell">Содержимое 2</li>
  <li class="cell">Содержимое 3</li>
</ul>

  <br>
  <br>

<ul class="container">
  <li class="cell">Содержимое 1</li>
  <li class="cell">Содержимое 2</li>
  <li class="cell">Содержимое 3</li>
</ul>


</body>
</html>

snovapavel 09.11.2016 11:41

Уважаемый, Рони, может этот класс «.showing» можно как-нибудь автоматически назначать в самом начале первому элементу?

Большое спасибо за помощь!

рони 09.11.2016 11:51

snovapavel,
смотрите код снова

snovapavel 10.11.2016 20:11

Большое спасибо!

Скажите, пожалуйста, как динамически добавить кнопки previous и next к каждому слайдеру? Чтобы не прописывать их в разметке?

А я их потом спозиционирую как нужно с помощью CSS.

Большое спасибо!

рони 10.11.2016 20:22

snovapavel,

snovapavel 11.11.2016 06:06

Да уж... Подскажете?

На старом сайте работал вот такой код:

function nextSlide() {
    goToSlide(currentSlide+1);
}

function previousSlide() {
    goToSlide(currentSlide-1);
}

var next = document.getElementById('next');
var previous = document.getElementById('previous');

next.onclick = function() {
    nextSlide();
};
previous.onclick = function() {
    previousSlide();
};


Но в новом коде, отсутствует переменная «currentSlide» и я не знаю за что зацепиться.

рони 11.11.2016 07:01

snovapavel,
был самокат, а вы просите примотать изолентой к нему панель управления, где мотор? фары? чем управлять?


Часовой пояс GMT +3, время: 00:27.