Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Два клика по кнопке (https://javascript.ru/forum/events/80399-dva-klika-po-knopke.html)

Vahan60 31.05.2020 19:24

Два клика по кнопке
 
Доброго времени суток.
Такая проблема - хочу, чтобы по клику на кнопку картинки менялись, а по повторному клику все возвращались на свои места.
Первый клик и первый обмен происходят штатно.
А вот повтор не работает.
Почему? Что не так делаю?

const colors = [
        ["colo/colZ1/Path_0.png", "colo/colZ2/Path_0.png"], 
	["colo/colZ1/Path_1.png", "colo/colZ2/Path_1.png"], 
	["colo/colZ1/Path_2.png", "colo/colZ2/Path_2.png"], 
	["colo/colZ1/Path_3.png", "colo/colZ2/Path_3.png"] 
];

// размещаем картинки 1-ой группы по местам при запуске сайта

let img = document.querySelectorAll(".img") 
for (let i = 0; i < colors.length; i++) {
    img[i].src = colors[i][0];
	img.display
    };

// меняем картинки на 2-ую группу на местах по клику на bttn

let bttn = document.querySelector (".bttn");  // меняем картинки на местах 
bttn.addEventListener ("click", function () {
  for (let i = 0; i < colors.length; i++) {
    img[i].src = colors[i][1];
	img.display
    };
});

// а вот обратного действия ( смена картинок 2-ой группы на картинки 1-ой группы по клику по той же bttn) не происходит

bttn.addEventListener ("click", function() {
  for (let i = 0; i < colors.length; i++) {
    img[i].src = colors[i][0];
	img.display
    };
});

рони 31.05.2020 19:41

Vahan60,
строка 21
img[i].src = colors[i].reverse()[0];


строку 28 убрать

Vahan60 01.06.2020 09:39

Работает. Спасибо огромное.
И сразу же два вопроса-уточнения.

1. Можно ли этот же принцип применить, если необходимо будет менять 3 и более групп картинок?

2. Я получил два вида фрагмента кода. Оба работают.
И все же - какой из них правильней/надёжней?

let bttn = document.querySelector (".bttn");

bttn.addEventListener ("click", function () {
  for (let i = 0; i < colors.length; i++) {
    img[i].src = colors[i].reverse()[0];
	img.display
    };
	
});

for (let i = 0; i < colors.length; i++) {
    img[i].src = colors[i][0];
    img.display
    };


let bttn = document.querySelector (".bttn");

bttn.addEventListener ("click", function () {
  for (let i = 0; i < colors.length; i++) {
    img[i].src = colors[i].reverse()[0];
	img.display
    };
	
  for (let i = 0; i < colors.length; i++) {
    img[i].src = colors[i][0];
    img.display
    }
});

рони 01.06.2020 10:04

Цитата:

Сообщение от Vahan60
img.display

что это?
Цитата:

Сообщение от Vahan60
Можно ли этот же принцип применить, если необходимо будет менять 3 и более групп картинок?

нет, нужен индекс, нужна переменная или атрибут где будет хранится индекс.
Цитата:

Сообщение от Vahan60
Я получил два вида фрагмента кода. Оба работают.

???!!! :blink:

рони 01.06.2020 10:12

Vahan60,
const colors = [
        ["colo/colZ1/Path_0.png", "colo/colZ2/Path_0.png"],
	["colo/colZ1/Path_1.png", "colo/colZ2/Path_1.png"],
	["colo/colZ1/Path_2.png", "colo/colZ2/Path_2.png"],
	["colo/colZ1/Path_3.png", "colo/colZ2/Path_3.png"]
];
const img = document.querySelectorAll(".img");
const bttn = document.querySelector(".bttn");
const len = colors[0].length;
let index = 0;
const changeSrc = index => colors.forEach((arrSrc, k) => img[k].src = arrSrc[index]);

changeSrc(index);

bttn.addEventListener ("click", function () {
index = ++index % len;
changeSrc(index)
});

Vahan60 01.06.2020 16:32

Цитата:

Сообщение от рони (Сообщение 525244)
что это?

Как оказалось - лишняя деталь.

Цитата:

Сообщение от рони (Сообщение 525244)
???!!! :blink:

Ну я же выше привел оба варианта.

Vahan60 01.06.2020 16:36

Цитата:

Сообщение от рони (Сообщение 525244)
нет, нужен индекс, нужна переменная или атрибут где будет хранится индекс.

Я так понимаю, в ответе #5 именно такой код написан?

рони 01.06.2020 17:01

Цитата:

Сообщение от Vahan60
в ответе #5 именно такой код написан?

да

рони 01.06.2020 17:02

Цитата:

Сообщение от Vahan60
Ну я же выше привел оба варианта.

второй вариант очень странный :) масло масляное

Vahan60 10.06.2020 12:35

Цитата:

Сообщение от рони (Сообщение 525264)
да

Уфф.
Вроде разобрался.
Спасибо.


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