Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Raw JS slider (https://javascript.ru/forum/events/56020-raw-js-slider.html)

Alexander Belov 26.05.2015 01:04

Raw JS slider
 
Подскажите, пожалуйста, как реализовать примитивный слайдер.
Есть несколько div class = "slider" По умолчанию они не видны, нужно каждому по очереди через 10 секунд присваивать class = "visible" (элемент с таким классом будет отображаться). Естественно, среди всех div class = "slider" только у одного div должен быть class = "visible"

Пока есть следующее:
var slider1 = document.getElementById('slider1'),
	slider2 = document.getElementById('slider2'),
    slider3 = document.getElementById('slider3'),
	slider4 = document.getElementById('slider4');	

	var elements = document.getElementsByClassName('slider');

	for (var i = 0; i < elements.length; i++) {

	}


Не понимаю, как "перебирать" каждый div и сразу проверять его на наличие class = "visible", и если такой class есть, то ОК, а если нет, то назначаем, предварительно убрав у того div, у которого такой class = "visible" присутствует в данный момент.

Пробовал замыканиями - не вышло ничего. Может быть, есть более простой способ реализовать такой слайдер (на чистом JS)?

рони 26.05.2015 01:26

Alexander Belov,
:-?
<!DOCTYPE HTML>

<html>

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

  </style>
</head>

<body>
<div class="slider">1</div>
<div class="slider">2</div>
<div class="slider">3</div>
<div class="slider">4</div>
<div class="slider">5</div>
<script>
  var items =  document.querySelectorAll(".slider"), len = items.length, indx = len-1;
  (function foo()
  {
     items[indx].classList.remove("visible");
     indx = ++indx % len;
     items[indx].classList.add("visible");
     window.setTimeout(foo, 300)
  })()
</script>
</body>

</html>

Alexander Belov 26.05.2015 15:31

Благодарю! Прокомментируйте, пожалуйста, принцип выполнения кода на 30 строке. Не понятно, зачем там модуль числа используется.

рони 26.05.2015 15:38

Alexander Belov,
чтоб indx невырастал больше числа элементов
<script>
for (var i=0, indx = 4 ; i<50; i++)  {document.write(++indx % 5 + " ")}
</script>

Alexander Belov 26.05.2015 15:43

Понятно, спасибо!


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