简体   繁体   English

CSS 类添加/删除不再有效 || 香草JS

[英]CSS class add/remove no longer working || vanilla JS

So previously I asked your help to execute a behaviour for when clicking a container div, said div would change height, clicking it again would revert it back to normal, as would clicking a sibling container div.因此,之前我请您帮助执行单击容器 div 时的行为,说 div 会改变高度,再次单击它会将其恢复正常,就像单击同级容器 div 一样。

I also added code for when clicking said div, the img inside would change data-src.我还添加了单击该 div 时的代码,里面的 img 会更改 data-src。 This img div (not the container) has a sibling that is just text.这个 img div(不是容器)有一个只是文本的兄弟。 It would change state through css, when the container div is clicked, a bit like the container div itself.当容器 div 被点击时,它会通过 css 改变状态,有点像容器 div 本身。

When adding the code for the data-src change, I lost this ability and cant find out why.在为 data-src 更改添加代码时,我失去了这种能力,无法找出原因。 Can you help me?你能帮助我吗?

This is my code:这是我的代码:

 const allImages = document.querySelectorAll('.containertira .imgclasstosize'); const allContainers = document.querySelectorAll('.containertira'); allContainers.forEach(el => { el.addEventListener('click', function(event) { const thisImg = el.querySelector('.imgclasstosize'); const thisTxt = el.querySelector('.centered'); const sibling = thisImg.nextElementSibling; // Get the next sibiling const bigSrc = thisImg.dataset.srcBig; const allOtherImages = Array.from(allImages).filter(img => { return img !== thisImg; }); const isBig = thisImg.classList.contains('big'); 1 if (isBig) { thisImg.classList.remove('big'); thisTxt.classList.remove('left'); // reset to the small image URL thisImg.src = thisImg.dataset.smallSrc; } else { // save the small image URL first: if (!thisImg.dataset.smallSrc) { thisImg.dataset.smallSrc = thisImg.src; } // change to the big image URL: thisImg.src = bigSrc; thisImg.classList.add('big'); thisTxt.classList.add('left'); sibling.classList.remove('hide'); } allOtherImages.forEach(img => { img.classList.remove('big'); // reset to the small image URL if (img.dataset.smallSrc) { img.src = img.dataset.smallSrc; } img.nextElementSibling.classList[isBig ? 'remove' : 'add']("hide"); }); }); } );
 .imgclasstosize{ width: 100%; object-fit: cover; position: relative; } img.imgclasstosize { height: 80px; border: 1px solid gray; transition : 1.5s all ease; } img.imgclasstosize.big { height: 100%; transition: 1.5s all ease; width: 70vw; margin-left: auto; } .containertira { position: relative; text-align: center; color: white; 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; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-family: 'blacker_pro_displayregular'; padding-top: 10px; /* background: linear-gradient(90deg, rgba(33,37,41,1) 0%, rgba(255,255,255,0) 50%); */ color: white; padding-left: 10px; padding-bottom: 6.5px; font-size: 5vh; display:block; pointer-events: none; } @media screen and (max-width: 960px) {.centered {font-size: 4.6vh;}} @media screen and (max-width: 500px) {.centered {font-size: 3.5vh;}} @media screen and (max-width: 375px) {.centered {font-size: 3vh;}} .centered.left{ top: 0%; left: 0%; transform: translate(0%, 0%); color: black; padding-left: 10px; padding-bottom: 6.5px; transition: all ease 0.5s; font-size: 7vh; } .imgclasstosize.big+.centered.hide { opacity: 0; }
 <div class="containertira"> <img id="primeiraimagem" class="imgclasstosize" src="//images.impresa.pt/expresso/2021-07-23-1---Minho.png-0c586cc8" data-src-big="//images.impresa.pt/expresso/2021-07-23-960px_minho.png-3938db2f"> <div class="centered">Minho</div> </div> <br> <div class="containertira"> <img id="primeiraimagem" class="imgclasstosize" src="//images.impresa.pt/expresso/2021-07-23-1---Minho.png-0c586cc8" data-src-big="//images.impresa.pt/expresso/2021-07-23-960px_minho.png-3938db2f"> <div class="centered">Minho</div> </div>

Best regards everyone.最好的问候大家。

I can't seem to reproduce your error.我似乎无法重现您的错误。 Tried copying your code and pasting it on a separated HTML file and everything worked.尝试复制您的代码并将其粘贴到单独的 HTML 文件中,一切正常。

If you execute this snippet and look at the console, you will see that the classes and properties are changing accordingly to your code.如果您执行此代码段并查看控制台,您将看到类和属性正在根据您的代码进行相应更改。

Maybe your code is executing before some library causing it to not execute something?也许你的代码在某个库之前执行,导致它不执行某些东西?

 const allImages = document.querySelectorAll('.containertira .imgclasstosize'); const allContainers = document.querySelectorAll('.containertira'); allContainers.forEach(el => { el.addEventListener('click', function(event) { const thisImg = el.querySelector('.imgclasstosize'); const thisTxt = el.querySelector('.centered'); const sibling = thisImg.nextElementSibling; // Get the next sibiling const bigSrc = thisImg.dataset.srcBig; const allOtherImages = Array.from(allImages).filter(img => { return img !== thisImg; }); const isBig = thisImg.classList.contains('big'); 1 if (isBig) { thisImg.classList.remove('big'); thisTxt.classList.remove('left'); // reset to the small image URL thisImg.src = thisImg.dataset.smallSrc; } else { // save the small image URL first: if (!thisImg.dataset.smallSrc) { thisImg.dataset.smallSrc = thisImg.src; } // change to the big image URL: thisImg.src = bigSrc; thisImg.classList.add('big'); thisTxt.classList.add('left'); sibling.classList.remove('hide'); } allOtherImages.forEach(img => { img.classList.remove('big'); // reset to the small image URL if (img.dataset.smallSrc) { img.src = img.dataset.smallSrc; } img.nextElementSibling.classList[isBig ? 'remove' : 'add']("hide"); }); }); } );
 .containertira {border:1px black solid;}
 <div class="containertira"> <img id="primeiraimagem" class="imgclasstosize" src="img/Tiras/1 - Minho.png" data-src-big="img/INFO joao/joao 2/joao 2/960 px/960px_minho.png"> <div class="centered">Minho</div> </div> <div class="containertira"> <img id="primeiraimagem" class="imgclasstosize" src="img/Tiras/1 - Minho.png" data-src-big="img/INFO joao/joao 2/joao 2/960 px/960px_minho.png"> <div class="centered">Minho2</div> </div> <div class="containertira"> <img id="primeiraimagem" class="imgclasstosize" src="img/Tiras/1 - Minho.png" data-src-big="img/INFO joao/joao 2/joao 2/960 px/960px_minho.png"> <div class="centered">Minho3</div> </div> <div class="containertira"> <img id="primeiraimagem" class="imgclasstosize" src="img/Tiras/1 - Minho.png" data-src-big="img/INFO joao/joao 2/joao 2/960 px/960px_minho.png"> <div class="centered">Minho4</div> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM