Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.08.2018, 12:33
Аспирант
Отправить личное сообщение для TheSanches Посмотреть профиль Найти все сообщения от TheSanches
 
Регистрация: 21.01.2018
Сообщений: 78

Работа с массивом
Доброго времени суток, делаю слайдер работающий по клику, логика реализована на удалении и присвоении классов к картинкам, но классы присваиваются сразу двум картинкам, а нужно чтобы присваивались по очереди после каждого клика, я так понимаю что нужно выйти из цикла, но не могу реализовать работающий код, подскажите как это правильно сделать.
<img class='header__bg' src="img/background.jpg">
<img class='header__bg header__bg_show' src="img/background2.jpg">
<img class='header__bg header__bg_show' src="img/background3.jpg"> <!-- header__bg_show opacity :0; -->


document.querySelector('.header__btn-left').addEventListener('click', sliderLeft);
let headerBg = document.querySelectorAll('.header__bg');
function sliderLeft(){
	headerBg.forEach(function(item){
		item.classList.contains('header__bg_show') == true ? 
                item.classList.remove('header__bg_show') : 
                item.classList.add('header__bg_show');
	});
}

Последний раз редактировалось TheSanches, 07.08.2018 в 12:36.
Ответить с цитированием
  #2 (permalink)  
Старый 07.08.2018, 12:46
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,750

Вообще всегда наоборот делают, т.е. присваивают класс тому элементу, который нужно показать, у вас наоборот.
document.querySelector('.header__btn-left').addEventListener('click', sliderLeft);

const sliderLeft = (function() {
    const nodeCollection = document.querySelectorAll('.header__bg');
    const className = 'header__bg_show';

    return function() {
        let index = false;
        nodeCollection.forEach(function(node, i) {
            if (index === false && !node.classList.contains(className))
                index = i;

            node.classList.add(className);
        });

        const node = !!nodeCollection[++index] ? nodeCollection[index] : nodeCollection[0];
        node.classList.remove(className);
    };
})();

Последний раз редактировалось Nexus, 07.08.2018 в 14:43. Причина: bugfix
Ответить с цитированием
  #3 (permalink)  
Старый 07.08.2018, 14:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080


document.querySelector('.header__btn-left').addEventListener('click', sliderLeft);
let headerBg = document.querySelectorAll('.header__bg');
let idx = 0;
function sliderLeft(){
    headerBg[idx].classList.remove('header__bg_show');
    ++idx;
    if(idx == headerBg.length) idx = 0;
    headerBg[idx].classList.add('header__bg_show');
 }
Ответить с цитированием
  #4 (permalink)  
Старый 07.08.2018, 15:36
Аспирант
Отправить личное сообщение для TheSanches Посмотреть профиль Найти все сообщения от TheSanches
 
Регистрация: 21.01.2018
Сообщений: 78

Спасибо
Ответить с цитированием
  #5 (permalink)  
Старый 07.08.2018, 16:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

TheSanches,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <style type="text/css">
  body{
      position: relative;
  }

  .header__bg{
       opacity: 0;
       transition: 1s;
       display: block;
       position: absolute;
  }
  .header__bg_show{
      opacity: 1;
  }

  </style>
 <script>
document.addEventListener('DOMContentLoaded', function() {
document.querySelector('.header__btn-left').addEventListener('click', sliderLeft);
let headerBg = document.querySelectorAll('.header__bg');
let idx = 0;
function sliderLeft(){
    headerBg[idx].classList.remove('header__bg_show');
    ++idx;
    if(idx == headerBg.length) idx = 0;
    headerBg[idx].classList.add('header__bg_show');
 }
});
 </script>
</head>

<body><input name="" type="button" value="next" class="header__btn-left">
<img class='header__bg header__bg_show' src="http://placeimg.com/400/200/people?r=1">
<img class='header__bg' src="http://placeimg.com/400/200/people?r=2">
<img class='header__bg' src="http://placeimg.com/400/200/people?r=3">

</body>

</html>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с двумерным массивом dllec Общие вопросы Javascript 2 24.08.2015 12:42
Работа с массивом. Где ошибка ? Cepreu Общие вопросы Javascript 2 07.03.2015 17:19
Работа с массивом. Где ошибка ? Cepreu Общие вопросы Javascript 4 07.03.2015 17:17
Работа с массивом Alexej Общие вопросы Javascript 12 20.02.2013 16:45
Работа с массивом strengerst Общие вопросы Javascript 37 04.02.2012 16:33