[英]How do I have multiple classes to listen to the click event in Javascript?
I have multiples of cards that I want to rotate individually through 3D transformation on each click (not all at the same time). 我想在每次点击时通过3D转换分别旋转多个卡(并非同时全部旋转)。 But, I can only seem to have the first one flip, but not the subsequent ones.
但是,我似乎只有第一个翻转,而没有后续翻转。
var card = document.querySelector('.card'); card.addEventListener( 'click', function() { card.classList.toggle('is-flipped'); });
body { font-family: sans-serif; } .scene { width: 200px; height: 260px; border: 1px solid #CCC; margin: 40px 0; perspective: 600px; } .card { width: 100%; height: 100%; transition: transform 1s; transform-style: preserve-3d; cursor: pointer; position: relative; } .card.is-flipped { transform: rotateY(180deg); } .card__face { position: absolute; width: 100%; height: 100%; line-height: 260px; color: white; text-align: center; font-weight: bold; font-size: 40px; backface-visibility: hidden; } .card__face--front { background: red; } .card__face--back { background: blue; transform: rotateY(180deg); }
<div class="scene"> <div class="card"> <div class="card__face card__face--front">front</div> <div class="card__face card__face--back">back</div> </div> </div> <div class="scene"> <div class="card"> <div class="card__face card__face--front">front</div> <div class="card__face card__face--back">back</div> </div> </div>
I tried wrapping the entire thing into class="wrapper" and the following code, but still didn't work: 我尝试将整个内容包装到class =“ wrapper”和以下代码中,但仍然无法正常工作:
var x = document.getElementsByClassName("wrapper").querySelectorAll(".scene");
x.addEventListener( 'click', function() {
x.classList.toggle('is-flipped');
You are using document.querySelector()
which returns only the first element with class card
. 您正在使用
document.querySelector()
,它仅返回class card
的第一个元素。 You should use Document.querySelectorAll()
and then forEach()
. 您应该使用
Document.querySelectorAll()
,然后forEach()
。 add event listener in loop. 在循环中添加事件监听器。
var cards = document.querySelectorAll('.card'); Array.from(cards).forEach(card => { card.addEventListener( 'click', function() { card.classList.toggle('is-flipped'); }); })
body { font-family: sans-serif; } .scene { width: 200px; height: 260px; border: 1px solid #CCC; margin: 40px 0; perspective: 600px; } .card { width: 100%; height: 100%; transition: transform 1s; transform-style: preserve-3d; cursor: pointer; position: relative; } .card.is-flipped { transform: rotateY(180deg); } .card__face { position: absolute; width: 100%; height: 100%; line-height: 260px; color: white; text-align: center; font-weight: bold; font-size: 40px; backface-visibility: hidden; } .card__face--front { background: red; } .card__face--back { background: blue; transform: rotateY(180deg); }
<div class="scene"> <div class="card"> <div class="card__face card__face--front">front</div> <div class="card__face card__face--back">back</div> </div> </div> <div class="scene"> <div class="card"> <div class="card__face card__face--front">front</div> <div class="card__face card__face--back">back</div> </div> </div>
The problem is that you are querying a single card using document.querySelector()
. 问题是您正在使用
document.querySelector()
查询单个卡 。
You have to query all cards using document.querySelectorAll()
. 您必须使用
document.querySelectorAll()
查询所有卡 。
Then use a forEach()
to attach the event handler to each card: 然后使用
forEach()
将事件处理程序附加到每张卡上:
document.querySelectorAll('.card').forEach(card => { card.addEventListener('click', () => { card.classList.toggle('is-flipped'); }); });
body { font-family: sans-serif; } .scene { width: 200px; height: 260px; border: 1px solid #CCC; margin: 40px 0; perspective: 600px; } .card { width: 100%; height: 100%; transition: transform 1s; transform-style: preserve-3d; cursor: pointer; position: relative; } .card.is-flipped { transform: rotateY(180deg); } .card__face { position: absolute; width: 100%; height: 100%; line-height: 260px; color: white; text-align: center; font-weight: bold; font-size: 40px; backface-visibility: hidden; } .card__face--front { background: red; } .card__face--back { background: blue; transform: rotateY(180deg); }
<div class="scene"> <div class="card"> <div class="card__face card__face--front">front</div> <div class="card__face card__face--back">back</div> </div> </div> <div class="scene"> <div class="card"> <div class="card__face card__face--front">front</div> <div class="card__face card__face--back">back</div> </div> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.