Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2021, 15:07   #1
rimkam
Новичок
Джуниор
 
Регистрация: 24.12.2016
Сообщений: 3
По умолчанию Как сделать, чтобы при клике на MORE/BACK переключалась только одна конкретная карточка, а не все сразу на чистом JS?

Есть такая, упрощенная для примера, разметка карточек товара:
Код:
<section class="cards_wrapper">
	<div class="card">
		<div class="face">
			<img class="picture" src="img/meter.png" alt="">
			<p class="more link">MORE</p>
		</div>
		<div class="description">
			<h3>Lorem ipsum dolor sit amet consectetur adipisicing elit.</h3>
			<p class="back link">BACK</p>
		</div>
		</div>
	<div class="card">
		<div class="face">
			<img class="picture" src="img/size.png" alt="">
			<p class="more link">MORE</p>
		</div>
		<div class="description">
			<h3>Lorem ipsum dolor sit amet consectetur adipisicing elit.</h3>
			<p class="back link">BACK</p>
		</div>
	</div>
	<div class="card">
		<div class="face">
			<img class="picture" src="img/weighing-scale.png" alt="">
			<p class="more link">MORE</p>
		</div>
		<div class="description">
			<h3>Lorem ipsum dolor sit amet consectetur adipisicing elit.</h3>
			<p class="back link">BACK</p>
		</div>
	</div>
</section>
Пробный JS:
Код:
const cardsLink = document.querySelectorAll(".link");
const cardsFace = document.querySelectorAll(".face");
cardsLink.forEach(cLink => {
	cLink.addEventListener("click", function() {
		cardsFace.forEach(cFace => {
			cFace.classList.toggle("on");
		});
	});
});
css:
Код:
.on {
	transform: translateX(-100%);
}
Как сделать, чтобы при клике на MORE/BACK переключалась только одна конкретная карточка, а не все сразу? Должно быть много карточек. Нужно реализовать на чистом JS без jQuery.
В JS знания пока очень поверхностные.
rimkam вне форума Ответить с цитированием
Старый 31.12.2021, 10:18   #2
maks1331
Форумчанин
 
Аватар для maks1331
 
Регистрация: 20.12.2016
Сообщений: 270
По умолчанию

Мудреный способ повесить обработчик события у тебя, казалось бы, такая простая задача, а у тебя аж ёлочный форейч.

Если по делу: Саму функцию обработки нужно сделать направленной.

Как?

Задай три атрибута: по 1 на каждую кнопку и 1 на контейнер карточки, условно:

data-parent-id="card1"
data-parent-id="card1"
data-id="card1"

В функции, которая сразабывает при клике теперь нужно считать этот атрибут и если он не установлен - залогировать ошибку, если есть - найти карточку с таким атрибутом и работать с ней.
формошлеп.рф
witech.su
maks1331 вне форума Ответить с цитированием
Старый 04.01.2022, 15:24   #3
Agency
Пользователь
 
Регистрация: 07.10.2017
Сообщений: 99
По умолчанию

наверное нет необходимости перебирать "cardsFace"
попробуй поработать с this внутри анонимной функции...
получить блок в котором произошло событие можно через closest
Agency вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при каждом клике одын обект показывается нужно а не все сразу olyaBodnar Помощь студентам 1 02.02.2020 12:44
Как сделать так чтоб при запуске программы сразу показывалась не одна форма а две либо больше? Jleksern Общие вопросы Delphi 4 19.01.2012 18:55
Как сделать, чтобы при двойном клике мышью не вылетало сервис-меню ? platinum355 HTML и CSS 3 29.06.2011 09:26