简体   繁体   English

我如何有多个类来监听Javascript中的click事件?

[英]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.

相关问题 如何在节点 JS 中监听操作系统点击事件? - How do I listen for the operating system click event in node JS? 如何在同一事件Javascript中侦听click事件 - How to listen for click event inside same event Javascript 如何使用 Javascript 通过单击向嵌套在 UL 中的多个子元素添加和删除类? - How do I add and remove classes to multiple child elements nested in an UL with a single click using Javascript? 如何使用javascript单击没有单击事件的按钮? - How do I use javascript to click a button with no on click event? 如何为要捕获的javascript click事件选择多个元素? - How do you select multiple elements for a javascript click event to be captured on? 如何监听全屏点击事件 - How to listen for fullscreen click event 如何让 Django 代码中的 Javascript 监听和响应前端的点击事件? - How do I make Javascript inside Django code listen & respond to on click events on the front end? 如何在 JavaScript 中监听三次点击? - How do I listen for triple clicks in JavaScript? 如何收听 Windows 通知上的点击事件? - How can I listen click event on Windows notifications? VueJS JSX:如何在渲染 function 上收听“点击”事件? - VueJS JSX: How can I listen to a "Click" event on a render function?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM