简体   繁体   English

由于活动班级,我如何更改图像?

[英]How can I change image due to active class?

I have three accordion which is toggle active class, and only show one accordion.我有三个手风琴是切换活动类,并且只显示一个手风琴。 I want to change my side image according to open(active) accordion.我想根据打开(活动)手风琴更改我的侧面图像。 For example;例如; if 1.accordion active show photo1.jpeg and so on.如果 1.accordion active show photo1.jpeg等等。 I can not find a way to achieve this.我找不到实现这一目标的方法。 I guess, There will be logic something like this;我猜,会有这样的逻辑; if first accordion classList contains active class show photo1.jpeg and so on.如果第一个手风琴类列表包含活动类显示 photo1.jpeg 等等。 Can someone please help me ?有人可以帮帮我吗 ?

 var acc = document.getElementsByClassName("accordion"); for (var i = 0; i < acc.length; i++) { acc[i].addEventListener("click", function() { this.classList.toggle("active"); var panel = this.nextElementSibling; if (panel.style.maxHeight) { panel.style.maxHeight = null; } else { let active = document.querySelectorAll(".accordion.active"); for (let j = 0; j < active.length; j++) { active[j].classList.remove("active"); active[j].nextElementSibling.style.maxHeight = null; } this.classList.toggle("active"); panel.style.maxHeight = panel.scrollHeight + "px"; } }); }
 .container { display: flex; } .img-container { height: 250px; width: auto; } .img-container img { height: 250px; width: auto; } .accordion { background-color: #eee; color: #444; cursor: pointer; padding: 18px; width: 100%; border: none; text-align: left; outline: none; font-size: 15px; transition: 0.4s; } .active, .accordion:hover { background-color: #ccc; } .panel { padding: 0 18px; background-color: white; max-height: 0; overflow: hidden; transition: max-height 0.2s ease-out; }
 <div class="container"> <div class="img-container"> <img src="https://picsum.photos/200/300" alt="image"> </div> <div class="accordion-container"> <button class="accordion">Section 1</button> <div class="panel"> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <button class="accordion">Section 2</button> <div class="panel"> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <button class="accordion">Section 3</button> <div class="panel"> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> </div> </div>

Using your code, here is one way to apply a different image per active tab.使用您的代码,这是为每个活动选项卡应用不同图像的一种方法。

I added id="image" to your image tag and I'm changing its source using the active index.我将 id="image" 添加到您的图像标签,并且我正在使用活动索引更改其来源。

I'm using example images to show the functionality.我正在使用示例图像来显示功能。 - Comments are within code. - 注释在代码中。

 var acc = document.getElementsByClassName("accordion"); //declare image as var for image tag var image = document.getElementById("image"); for (var i = 0; i < acc.length; i++) { acc[i].addEventListener("click", function() { this.classList.toggle("active"); var panel = this.nextElementSibling; if (panel.style.maxHeight) { panel.style.maxHeight = null; } else { let active = document.querySelectorAll(".accordion.active"); for (let j = 0; j < active.length; j++) { active[j].classList.remove("active"); active[j].nextElementSibling.style.maxHeight = null; //change image source based on active index if (j === 0) { image.src = "https://cdn.pixabay.com/photo/2020/11/04/19/22/windmill-5713337__340.jpg" } if (j === 1) { image.src = "https://cdn.pixabay.com/photo/2020/11/04/15/29/coffee-beans-5712780__340.jpg" } } this.classList.toggle("active"); panel.style.maxHeight = panel.scrollHeight + "px"; } }); }
 .container { display: flex; } .img-container { height: 250px; width: auto; } .img-container img { height: 250px; width: auto; } .accordion { background-color: #eee; color: #444; cursor: pointer; padding: 18px; width: 100%; border: none; text-align: left; outline: none; font-size: 15px; transition: 0.4s; } .active, .accordion:hover { background-color: #ccc; } .panel { padding: 0 18px; background-color: white; max-height: 0; overflow: hidden; transition: max-height 0.2s ease-out; }
 <div class="container"> <div class="img-container"> <img id="image" src="https://picsum.photos/200/300" alt="image"> </div> <div class="accordion-container"> <button class="accordion">Section 1</button> <div class="panel"> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <button class="accordion">Section 2</button> <div class="panel"> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <button class="accordion">Section 3</button> <div class="panel"> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> </div> </div>

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

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