首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript:当悬停在一个元素上时,如何针对幻灯片中选定的元素?

Javascript:当悬停在一个元素上时,如何针对幻灯片中选定的元素?
EN

Stack Overflow用户
提问于 2019-03-19 17:18:23
回答 3查看 318关注 0票数 2

好的,我正在写我自己的javascript幻灯片,它由卡片组成。现在,我在卡片中添加/循环,并添加一个事件侦听器(mouseover和mouseout)来检查用户是否徘徊在所选卡上。

现在是问题所在。我需要能够瞄准所有的卡片(第1部分,见图像),这是在用户选择的卡片之前,也是所有的卡片(第2部分,见图像)之后。但我必须把他们作为目标。基本上,第1部分中的卡片将得到一种样式,而第2部分中的卡片将得到另一种样式。选择的卡片会有自己的造型。

这就是我到目前为止所拥有的。如果有人能给我指明正确的方向,那就太好了,谢谢。我不想使用任何库,严格地说是javascript。

代码语言:javascript
复制
var cards = [];
cards = document.querySelectorAll('.card');
for (var i = 0; i < cards.length; i++) {
  cards[i].addEventListener('mouseover', function() {
    //Do something
    console.log('Mouseover: Do something');
  });

  cards[i].addEventListener('mouseout', function() {
    //Do something
    console.log('Mouseout: Do something');
  });
}
代码语言:javascript
复制
.container {
  list-style: none;
  margin: 0px;
  padding: 0px;
}

.card {
  display: inline-block;
  background-color: #fff2cc;
  width: 100px;
  height: 150px;
  color: #000;
  text-align: center;
}
代码语言:javascript
复制
<ul class="container">
  <li class="card">Card-1</li>
  <li class="card">Card-2</li>
  <li class="card">Card-3</li>
  <li class="card">Card-4</li>
  <li class="card">Card-5</li>
</ul>

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-19 17:37:35

您可以分别为组/第1部分、当前卡和组/第2部分设置类。

您也可以监听事件的冒泡阶段,而不是多个侦听器注册。

检查一下。

代码语言:javascript
复制
let ul = document.querySelectorAll('ul')[0];
ul.addEventListener('mouseover', function(e) {  
  
  if(e.target.className.indexOf("card") === -1) { return; }

  let currentFound = false;  
  document.querySelectorAll('.card').forEach(function(card) {
  
    if(card === e.target) { 
      card.classList.add("current-card");
      currentFound = true;
    }
    else
    if(currentFound) {
      card.classList.add("next-cards");
    } 
    else {
       card.classList.add("previous-cards");
    }});
});  


ul.addEventListener('mouseout', function() {
  document.querySelectorAll('.card').forEach(
    function(card) {
      card.classList.remove("previous-cards");
      card.classList.remove("next-cards"); 
      card.classList.remove("current-card");});
  });
代码语言:javascript
复制
.container {
  list-style: none;
  margin: 0px;
  padding: 0px;
}

.card {
  display: inline-block;
  background-color: #fff2cc;
  width: 100px;
  height: 150px;
  color: #000;
  text-align: center;
}

.previous-cards {
  background-color: crimson;
}

.next-cards {
  background-color: darkred;
}

.current-card {
  background-color: indianred;
}
代码语言:javascript
复制
<ul class="container">
  <li class="card">Card-1</li>
  <li class="card">Card-2</li>
  <li class="card">Card-3</li>
  <li class="card">Card-4</li>
  <li class="card">Card-5</li>
</ul>

如果您希望保留颜色直到下一个悬停,只需删除鼠标出侦听器,并将其逻辑启动鼠标超过侦听器后,立即如果阻塞。

票数 0
EN

Stack Overflow用户

发布于 2019-03-19 17:36:33

您可以选择特定的卡并使用jquery应用类名。

代码语言:javascript
复制
var cards = [];
cards = document.querySelectorAll('.card');
for (var i = 0; i < cards.length; i++) {
  cards[i].addEventListener('mouseover', function() {
    //Do something
    $(this).addClass('selected');
    console.log('Mouseover: Do something');
  });

  cards[i].addEventListener('mouseout', function() {
    //Do something
    $(this).removeClass('selected');
    console.log('Mouseout: Do something');
  });
}
代码语言:javascript
复制
.container {
  list-style: none;
  margin: 0px;
  padding: 0px;
}

.card {
  display: inline-block;
  background-color: #fff2cc;
  width: 100px;
  height: 150px;
  color: #000;
  text-align: center;
}

.selected{
  background-color: blue;
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="container">
  <li class="card">Card-1</li>
  <li class="card">Card-2</li>
  <li class="card">Card-3</li>
  <li class="card">Card-4</li>
  <li class="card">Card-5</li>
</ul>

你甚至可以使用简单的css,这将是逗号的所有卡。

当卡类悬停时,此css将执行。

代码语言:javascript
复制
.card:hover{
  background-color: blue;
}
票数 1
EN

Stack Overflow用户

发布于 2019-03-19 17:28:39

我会用CSS和它的同胞选择器来完成这个任务:

代码语言:javascript
复制
.card {
    background-color: red;
}

.card:hover ~ .card {
    background-color: green;
}

如果需要使用JavaScript,请使用[...mouseEnterCard.parentElement.children].indexOf(mouseEnterCard)获取元素索引,然后循环使用索引较低/更高的元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55246652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档