使用 JS 使同级 class 在点击时消失
Make sibling class disappear on click with JS
社区大家好,
我有这个 HTML:
<div class="containertira">
<img id="primeiraimagem" class="imgclasstosize" src="img/Tiras/1 - Minho.png">
<div class="centered"> Minho</div>
</div>
我有一个 JS,当我点击 .imgclasstosize
时,它会将其更改为 img.imgclasstosize.big
,同时将任何预先更改的 img.imgclasstosize.big
还原为 img.imgclasstosize
。
这里是:
const allImages = document.querySelectorAll('.imgclasstosize');
allImages.forEach(el => {
el.addEventListener('click', function(event) {
const thisImg = event.target;
const allOtherImages = Array.from(allImages).filter(img => {
return img !== thisImg;
});
allOtherImages.forEach(img => {
img.classList.remove('big')
});
thisImg.classList.toggle('big');
});
});
我的问题是:是否可以在单击 .imgclasstosize
时也使它的同级 class 消失 .centered
,并在 img.imgclasstosize.big
时将其恢复为可见回到 .imgclasstosize
?
问题的第二部分是:我在 div“居中”中放入的任何内容都会阻止点击和后续操作,主要是在我的情况下,因为我在图像上方使用文本。因此,例如,如果我单击位于 .imgclasstosize
内的 img 上方的 .centered
内的文本,则不会发生任何操作。我怎样才能假设点击 .imgclasstosize
和点击 .centered
是同一件事?
可以使用nextElementSibling
属性来引用兄弟节点
您可以在此处阅读更多相关信息:https://www.w3schools.com/jsref/prop_element_nextelementsibling.asp
您需要使用 nextElementSibling 来切换 类,您可以使用 CSS 隐藏它们。我已根据您的要求添加了额外的代码和评论。
const allImages = document.querySelectorAll('.imgclasstosize');
allImages.forEach(el => {
el.addEventListener('click', function(event) {
const thisImg = event.target;
const sibling = thisImg.nextElementSibling; // Get the next sibling
sibling.classList.toggle("hide"); // Add class to the current sibling
const allOtherImages = Array.from(allImages).filter(img => {
return img !== thisImg;
});
allOtherImages.forEach(img => {
img.classList.remove('big');
const otherSiblings = img.nextElementSibling;
otherSiblings.classList.remove("hide"); // Remove hide class from other image siblings
});
thisImg.classList.toggle('big');
});
}
);
.containertira {
display: flex;
justify-content: space-between;
}
.imgclasstosize {
transition: all ease 0.5s;
}
.imgclasstosize.big {
transform: scale(1.1);
}
.centered {
opacity: 1;
transition: all ease 0.5s;
}
.imgclasstosize.big+.centered.hide {
opacity: 0;
}
<div class="containertira">
<img id="primeiraimagem" class="imgclasstosize" src="https://placehold.it/100x100">
<div class="centered"> First image</div>
<img id="primeiraimagem" class="imgclasstosize" src="https://placehold.it/100x100">
<div class="centered"> Second image</div>
<img id="primeiraimagem" class="imgclasstosize" src="https://placehold.it/100x100">
<div class="centered"> Third image</div>
</div>
社区大家好,
我有这个 HTML:
<div class="containertira">
<img id="primeiraimagem" class="imgclasstosize" src="img/Tiras/1 - Minho.png">
<div class="centered"> Minho</div>
</div>
我有一个 JS,当我点击 .imgclasstosize
时,它会将其更改为 img.imgclasstosize.big
,同时将任何预先更改的 img.imgclasstosize.big
还原为 img.imgclasstosize
。
这里是:
const allImages = document.querySelectorAll('.imgclasstosize');
allImages.forEach(el => {
el.addEventListener('click', function(event) {
const thisImg = event.target;
const allOtherImages = Array.from(allImages).filter(img => {
return img !== thisImg;
});
allOtherImages.forEach(img => {
img.classList.remove('big')
});
thisImg.classList.toggle('big');
});
});
我的问题是:是否可以在单击 .imgclasstosize
时也使它的同级 class 消失 .centered
,并在 img.imgclasstosize.big
时将其恢复为可见回到 .imgclasstosize
?
问题的第二部分是:我在 div“居中”中放入的任何内容都会阻止点击和后续操作,主要是在我的情况下,因为我在图像上方使用文本。因此,例如,如果我单击位于 .imgclasstosize
内的 img 上方的 .centered
内的文本,则不会发生任何操作。我怎样才能假设点击 .imgclasstosize
和点击 .centered
是同一件事?
可以使用nextElementSibling
属性来引用兄弟节点
您可以在此处阅读更多相关信息:https://www.w3schools.com/jsref/prop_element_nextelementsibling.asp
您需要使用 nextElementSibling 来切换 类,您可以使用 CSS 隐藏它们。我已根据您的要求添加了额外的代码和评论。
const allImages = document.querySelectorAll('.imgclasstosize');
allImages.forEach(el => {
el.addEventListener('click', function(event) {
const thisImg = event.target;
const sibling = thisImg.nextElementSibling; // Get the next sibling
sibling.classList.toggle("hide"); // Add class to the current sibling
const allOtherImages = Array.from(allImages).filter(img => {
return img !== thisImg;
});
allOtherImages.forEach(img => {
img.classList.remove('big');
const otherSiblings = img.nextElementSibling;
otherSiblings.classList.remove("hide"); // Remove hide class from other image siblings
});
thisImg.classList.toggle('big');
});
}
);
.containertira {
display: flex;
justify-content: space-between;
}
.imgclasstosize {
transition: all ease 0.5s;
}
.imgclasstosize.big {
transform: scale(1.1);
}
.centered {
opacity: 1;
transition: all ease 0.5s;
}
.imgclasstosize.big+.centered.hide {
opacity: 0;
}
<div class="containertira">
<img id="primeiraimagem" class="imgclasstosize" src="https://placehold.it/100x100">
<div class="centered"> First image</div>
<img id="primeiraimagem" class="imgclasstosize" src="https://placehold.it/100x100">
<div class="centered"> Second image</div>
<img id="primeiraimagem" class="imgclasstosize" src="https://placehold.it/100x100">
<div class="centered"> Third image</div>
</div>