Tomut0
@Tomut0
Простой студент, изучающий глубоководье IT.

Есть ли простой способ найти конкретный элемент, если кликаешь на другой элемент?

Нужно сделать анимацию переворота всех карточек.
Возникла проблема с нахождением элементов: пользователь кликает на один элемент, а переворачиваться должна вся карточка. Вся сложность в том, чтобы определить карточку, кликнув на элемент, который отвечает за действие переворота.

Для этого я использовал e.target, но как от него найти карточку, на которую мы кликнули, при этом, чтобы этот способ был универсален для нескольких таких же карточек.

Примерный код:

HTML:
<div class="card">
<p class="item">Кликни, чтобы перевернуть карточку!</p>
</div>
<div class="card">
 <p class="item">Кликни, чтобы перевернуть карточку!</p>
</div>

JS:
item.forEach(item => item.addEventListener("click", function (e) {
// Можно ли здесь обойтись без этого и использовать что-то другое?
	for (var i of item) {
		f (e.target.parentElement == i) {
			card = i;
			break;
		}
	}
card.addEventListener("click", function () {
  card.style.transform = "rotateX(35deg)";
});
});


Есть ли другой способ более лёгкий и простой?
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
Да, есть.

Эти элементы должны быть связаны по смыслу. Тогда и будет способ из обработчика к одному элементу работать с другим элементом. Например, у них должна быть родительская связь. Или один должен следовать за другим. Или во время создания обработчика нужно передать в него индекс нужного элемента и т.д. Способов много. А самый элегантный зависит от конкретной задачи.

Конкретно ваш код можно упростить, как минимум, до такого:
Код
let d = document, card = d.querySelectorAll(".card");
var current = null;

d.querySelectorAll(".btn").forEach(item => item.addEventListener("click", (e) => rotateCard(e)));

function rotateCard(e) {
	// Is there another way to find the item?
	current = e.target.parentElement.parentElement;
	current.style.transform = 'scale(2)';
}

Или можно учесть, что количество и порядок индексов одинаковый, и привязаться к нему. Тогда получится это:
Код
let d = document, card = d.querySelectorAll(".card");
var current = null;

d.querySelectorAll(".btn").forEach((item,j) => item.addEventListener("click", () => rotateCard(j)));

function rotateCard(idx) {
	// Is there another way to find the item?
	current = card[idx];
	current.style.transform = 'scale(2)';
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы