我想复制这个效果当你悬停在一个文本,所有其他文本将获得不透明度0。
以下是网站:https://www.jeandawson.com/
我试图用纯css来解决这个问题。然而,据我所知,当你悬停一个特定的孩子并影响他们时,你不能选择所有的孩子。
我试用了一个~选择器,这部分是因为它为即将到来的孩子设置了不透明度,但是前面的选择器没有受到影响。
我用javascript尝试了这段代码,但是当我将它悬停时,selectedBox中的值不会被保存,不透明度也不会改变。我仍然在学习javascript,我相信通过事件侦听器,代码不会改变吗?
var boxes = document.querySelectorAll("[class^=box-]")
let selectedBox = null
const newList = [...boxes]
boxes.forEach( (e) => {
e.addEventListener("mouseover", () =>{
selectedBox = e
})
e.addEventListener("mouseleave", ()=>{
selectedBox = null
})
})
console.log(selectedBox)
boxes.forEach( (e) => {
if (selectedBox == null){
e.style.opacity = 1
}
else{
e.style.opacity = 0
}
})* {
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding: 0;
margin: 0;
}
body {
width: 100%;
height: 100vh;
font-size: 3rem;
font-family: serif;
}
[class^="box-"] {
background-color: skyblue;
}
.container:hover [class^="box-"]:not(:hover) {
opacity: 0;
}
.box-1 {
grid-area: A;
align-self: flex-start;
}
.box-2 {
grid-area: B;
align-self: flex-start;
}
.box-3 {
grid-area: C;
align-self: flex-start;
}
.box-4 {
grid-area: D;
align-self: flex-end;
}
.box-5 {
grid-area: E;
align-self: flex-start;
}
.box-6 {
grid-area: F;
align-self: center;
}
.box-7 {
grid-area: G;
align-self: center;
}
.container4 {
margin-top: 3em;
display: -ms-grid;
display: grid;
gap: 20px;
height: 100%;
width: 100%;
margin: 0 auto;
grid-template-areas: "A A A B B B D D D C C C" "A A A B B B D D D C C C" "E E E F F F . . . G G G" "E E E F F F . . . G G G";
}
@media (max-width: 996px) {
.container4 {
grid-template-areas: "A A" "B B" "C D" "C D" "E E" "F F";
}
}
@media (max-width: 556px) {
.container4 {
grid-template-areas: "A" "B" "D" "D" "D" "C" "E" "F";
}
}
.changing {
z-index: 20;
background-color: red;
}
/*# sourceMappingURL=style.css.map */<div class="container4">
<div class="box-1">
<p>Devilish</p>
<p>00:01:34</p>
</div>
<div class="box-2">
<p>Starface*</p>
<p>00:01:34</p>
</div>
<div class="box-3">
<p>Devilish</p>
<p>00:01:34</p>
</div>
<div class="box-4">
<p>Devilish</p>
<p>00:01:34</p>
</div>
<div class="box-5">
<p>Devilish</p>
<p>00:01:34</p>
</div>
<div class="box-6">
<p>Devilish</p>
<p>00:01:34</p>
</div>
<div class="box-7">
<p>Devilish</p>
<p>00:01:34</p>
</div>
</div>
发布于 2021-03-29 11:22:49
它怎麽工作?
i。在它的帮助下,我们向每个box(boxes[i])添加了2个事件,如下所示:for (设i= 0;i< boxes.length;i++) { boxesi.addEventListener("mouseover",() => { });boxesi.addEventListener("mouseleave",() => { });}
j事件中具有当前的mouseover。我们添加了另一个循环,因为我们不想选择已经悬停的元素,所以我们在if- one语句中使用了i !== j:(这里已经选中的是i,j也有相同的元素i,这就是为什么我们用这个i !== j__排除它的原因),然后我们简单地将0的opacity添加到所有没有悬停的元素中,而悬浮的元素具有opacity of 1。for (设i= 0;i< boxes.length;i++) { boxesi.addEventListener("mouseover",() => { for (j= 0;j< boxes.length;j++) { if (i !== j) boxesj.style.opacity = 0;=> boxesj.style.opacity = 1;}})。。。}
opacity of 1添加到all中,因为悬停的部分是离开的。。。。boxesi.addEventListener("mouseleave",() => { for (设j= 0;j< boxes.length;j++) { boxesj.style.opacity = 1;});}
const boxes = document.querySelectorAll("[class^=box-]");
for (let i = 0; i < boxes.length; i++) {
boxes[i].addEventListener("mouseover", () => {
for (let j = 0; j < boxes.length; j++) {
if (i !== j) boxes[j].style.opacity = 0;
else boxes[j].style.opacity = 1;
}
});
boxes[i].addEventListener("mouseleave", () => {
for (let j = 0; j < boxes.length; j++) {
boxes[j].style.opacity = 1;
}
});
}* {
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding: 0;
margin: 0;
}
body {
width: 100%;
height: 100vh;
font-size: 3rem;
font-family: serif;
}
[class^="box-"] {
background-color: skyblue;
transition-duration: 0.2s;
}
[class^="box-"]:hover {
background-color: blueviolet;
color: #ffffff;
cursor: pointer;
}
.container:hover [class^="box-"]:not(:hover) {
opacity: 0;
}
.box-1 {
grid-area: A;
align-self: flex-start;
}
.box-2 {
grid-area: B;
align-self: flex-start;
}
.box-3 {
grid-area: C;
align-self: flex-start;
}
.box-4 {
grid-area: D;
align-self: flex-end;
}
.box-5 {
grid-area: E;
align-self: flex-start;
}
.box-6 {
grid-area: F;
align-self: center;
}
.box-7 {
grid-area: G;
align-self: center;
}
.container4 {
margin-top: 3em;
display: -ms-grid;
display: grid;
gap: 20px;
height: 100%;
width: 100%;
margin: 0 auto;
grid-template-areas: "A A A B B B D D D C C C" "A A A B B B D D D C C C" "E E E F F F . . . G G G" "E E E F F F . . . G G G";
}
@media (max-width: 996px) {
.container4 {
grid-template-areas: "A A" "B B" "C D" "C D" "E E" "F F";
}
}
@media (max-width: 556px) {
.container4 {
grid-template-areas: "A" "B" "D" "D" "D" "C" "E" "F";
}
}
.changing {
z-index: 20;
background-color: red;
}<div class="container4">
<div class="box-1">
<p>Devilish</p>
<p>00:01:34</p>
</div>
<div class="box-2">
<p>Starface*</p>
<p>00:01:34</p>
</div>
<div class="box-3">
<p>Devilish</p>
<p>00:01:34</p>
</div>
<div class="box-4">
<p>Devilish</p>
<p>00:01:34</p>
</div>
<div class="box-5">
<p>Devilish</p>
<p>00:01:34</p>
</div>
<div class="box-6">
<p>Devilish</p>
<p>00:01:34</p>
</div>
<div class="box-7">
<p>Devilish</p>
<p>00:01:34</p>
</div>
</div>
发布于 2021-03-29 11:34:02
用forEach()方法求解。
var boxes = document.querySelectorAll("[class^=box-]");
boxes.forEach(function(box) {
box.addEventListener("mouseover", function() {
boxes.forEach(function(box_hide) {box_hide.style.opacity = '0'});
this.style.opacity = '';
})
box.addEventListener("mouseout", function() {
boxes.forEach(function(box_show) {box_show.style.opacity = ''});
})
});* {
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding: 0;
margin: 0;
}
body {
width: 100%;
height: 100vh;
font-size: 3rem;
font-family: serif;
}
[class^="box-"] {
background-color: skyblue;
transition: .5s;
cursor: pointer;
}
/*.container:hover [class^="box-"]:not(:hover) {
opacity: 0;
}*/
.box-1 {
grid-area: A;
align-self: flex-start;
}
.box-2 {
grid-area: B;
align-self: flex-start;
}
.box-3 {
grid-area: C;
align-self: flex-start;
}
.box-4 {
grid-area: D;
align-self: flex-end;
}
.box-5 {
grid-area: E;
align-self: flex-start;
}
.box-6 {
grid-area: F;
align-self: center;
}
.box-7 {
grid-area: G;
align-self: center;
}
.container4 {
margin-top: 3em;
display: -ms-grid;
display: grid;
gap: 20px;
height: 100%;
width: 100%;
margin: 0 auto;
grid-template-areas: "A A A B B B D D D C C C" "A A A B B B D D D C C C" "E E E F F F . . . G G G" "E E E F F F . . . G G G";
}
@media (max-width: 996px) {
.container4 {
grid-template-areas: "A A" "B B" "C D" "C D" "E E" "F F";
}
}
@media (max-width: 556px) {
.container4 {
grid-template-areas: "A" "B" "D" "D" "D" "C" "E" "F";
}
}
.changing {
z-index: 20;
background-color: red;
}
/*# sourceMappingURL=style.css.map */<div class="container4">
<div class="box-1">
<p>Devilish</p>
<p>00:01:34</p>
</div>
<div class="box-2">
<p>Starface*</p>
<p>00:01:34</p>
</div>
<div class="box-3">
<p>Devilish</p>
<p>00:01:34</p>
</div>
<div class="box-4">
<p>Devilish</p>
<p>00:01:34</p>
</div>
<div class="box-5">
<p>Devilish</p>
<p>00:01:34</p>
</div>
<div class="box-6">
<p>Devilish</p>
<p>00:01:34</p>
</div>
<div class="box-7">
<p>Devilish</p>
<p>00:01:34</p>
</div>
</div>
https://stackoverflow.com/questions/66852977
复制相似问题