如何使节点列表中除目标元素以外的所有元素消失?

用户名

https://codepen.io/m4rsibar/pen/zyPBoz?editors=0110

我已经制作了一个代码库示例,说明了我想要的效果(我在css部分的最顶部包含了创建效果的代码),不过我想在javascript中做到这一点。(除非有一种方法可以解决我在CSS版本中遇到的问题)

问题是:将鼠标悬停在包含圆形元素的div上,如果将鼠标悬停在div中,并且不在某个元素的顶部,则它们都会消失。

我在CSS中使用:not选择器来实现此目标,并将其放在父元素上,这是我知道如何使其正常工作的唯一方法,我尝试过尝试并进行一些改动,无济于事,所以我决定使用javascript执行此操作。

在另一个Codepen中,我试图尽可能简化以达到我想要的效果。到目前为止我还没有:https : //codepen.io/m4rsibar/pen/yGPqZM

如您所见,当您离开盒子时,它并没有回到原始的不透明度。

我应该使用类并切换它们吗?

let lis= document.querySelectorAll('li')
console.log(lis)

lis.forEach(function(li) {
  li.addEventListener("mouseover", function(e) {
    lis.forEach(function(li) {

       e.target.style.opacity="1";
      if(e.target.style.opacity==="1"){
  li.style.opacity="0.3";
         }else{
             li.style.opacity="1";
         } 
    });
  })
});
安迪·霍夫曼

这是一种仅使用CSSno的行的更简单方法JavaScript因为opacity: 1是隐式的,所以我们根本不必声明所有样式,只需声明非悬停状态的样式即可。

li {
  list-style: none;
  background-color: pink;
  margin: 2px;
  height: 200px;
  width: 200px
}

ul {
  display: flex;
}

li:not(:hover) {
  opacity: 0.3;
}
<ul>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>

更新资料

在收到您的反馈和最新示例之后,我再次尝试了一下。我的目标是避免activeul上都使用双重课程li这不是从性能的角度理想的,但除此之外,它更JavaScriptCSS维护。

我想到的是一个功能,该功能可检测anli是否为当前目标(鼠标位于内ul)。如果当前目标不是“ a”,li则表示我们ul处于活动状态,但没有儿童在徘徊。我相应地切换课程。我喜欢所有内容都存储在中,ul并且我们不再需要任何li事件跟踪。

var ul = document.querySelector('ul');

function boxEnter(e) {
  this.classList.add('active');
}

function boxLeave(e) {
  this.classList.remove('active');
}

function boxMove(e) {
  this.classList.toggle('childrenInactive', e.target.tagName !== 'LI');
}

ul.addEventListener('mousemove', boxMove);
ul.addEventListener('mouseenter', boxEnter);
ul.addEventListener('mouseleave', boxLeave);
li {
  list-style: none;
  background-image: url('https://source.unsplash.com/collection/1163637/200x200');
  border-radius: 50%;
  margin: 2px;
  height: 200px;
  width: 200px;
  transition: .3s ease;
  cursor: crosshair;
  will-change: filter, transform;
}

ul {
  display: flex;
  flex-wrap: wrap;
}

ul.active li {
  opacity: .3;
  transform: scale(1.1);
  filter: blur(5px);
}

ul li:hover,
ul.active.childrenInactive li {
  opacity: 1;
  transform: scale(1);
  filter: blur(0);
}
<ul>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>

http://jsfiddle.net/j3reaqsw/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Elixir-如何获取除列表中的最后一个元素以外的所有元素?

如何从数组中删除除最后N个元素以外的所有元素?

如何选择除ith元素以外的数组中的所有其他值?

选择除最后一个列表元素以外的所有元素

如何从数组中删除除JavaScript中的第一个元素以外的所有元素

如何在Matlab中获取矩阵的除第一个元素以外的所有元素?

如何清除向量中除特定范围内的最大元素以外的所有元素?

如何使用列表切片从列表中获取除第一个元素以外的所有内容

我如何使用jQuery获取除最后一个元素以外的所有元素

在jQuery中隐藏某个类的除一个元素以外的所有元素

使用jQuery禁用除表单中的某些元素以外的所有输入元素

从某个类中获取除元素以外的所有元素?

获取文档中除id为'main-nav'的元素以外的所有元素。

如何更改除數組中的第一個元素以外的所有元素以僅顯示差異

Angular 2 Dart:如何检测除元素以外的所有内容?

删除Java中除某些DOM元素以外的所有内容?

如何将nth-of-type与:before一起使用,并将除最后一个元素以外的所有元素作为目标,或者将最后一个元素不同地作为目标

我如何选择除具有特定类的div内的那些元素以外的所有元素

JavaScript遍历类元素,然后选择除单击的元素以外的所有元素

有什么方法可以选择.on()函数中除一个元素以外的所有元素

如何使用jQuery隐藏除最后一个元素以外的所有元素(按类)

替换2D数组特定行中除最后一个元素以外的所有元素

PHP:从关联数组中删除除最后两个元素以外的所有元素

选择除具有特定类的最后一个元素以外的所有元素

对除最后一个元素以外的所有元素应用border-right

设置除最后四个元素以外的所有元素的样式

除最后一个元素以外的所有元素上的边距

为除第一个元素以外的所有元素实现代码

如何打印字典中除指定元素以外的元素