简体   繁体   English

打开手风琴页面加载/但在移动视图上保持关闭

[英]Open accordion on page load / But leave it close on mobile view

I'm trying to have this accordion open in desktop view (on page load), but close in mobile view. 我正在尝试在桌面视图中打开此手风琴(在页面加载时),但在移动视图中关闭。 Also I want this accordion to react to event on click, which it already does well. 此外,我希望这个手风琴对点击事件作出反应,它已经做得很好。

So I'm having trouble having it open by default on desktop view while not in mobile view. 所以我在桌面视图上默认打开它而不在移动视图中时遇到问题。 Is it possible to make this work only by improving the js file I have here or also changing the css ? 是否可以通过改进我在这里的js文件或改变css来使这项工作成功?

Any help welcome for this task, I'm ok with css but little knowledge in js. 任何帮助欢迎这项任务,我对css很好,但对js知之甚少。

 var acc = document.getElementsByClassName("accordion"); var i; for (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 { panel.style.maxHeight = panel.scrollHeight + "px"; } }); } 
 .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; } .accordion:after { content: '\\002B'; color: #777; font-weight: bold; float: right; margin-left: 5px; } .active:after { content: "\\2212"; } .panel { padding: 0 18px; background-color: white; max-height: 0; overflow: hidden; transition: max-height 0.2s ease-out; } 
 <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> 

You can consider a media query to set the max-height for big devices in order to have the accordion opne then adjust your JS code like below: 您可以考虑使用媒体查询来设置大型设备的max-height ,以便使用手风琴opne然后调整您的JS代码,如下所示:

 var acc = document.getElementsByClassName("accordion"); var i; for (i = 0; i < acc.length; i++) { acc[i].addEventListener("click", function() { this.classList.toggle("active"); var panel = this.nextElementSibling; if (window.getComputedStyle(panel,null).getPropertyValue("max-height") !== "0px"){ panel.style.maxHeight = "0px"; } else { panel.style.maxHeight = panel.scrollHeight + "px"; } }); } 
 .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; } .accordion:after { content: '\\002B'; color: #777; font-weight: bold; float: right; margin-left: 5px; } .active:after { content: "\\2212"; } .panel { padding: 0 18px; background-color: white; max-height: 0px; overflow: hidden; transition: max-height 0.2s ease-out; } @media (min-width:600px) { .panel { max-height:500px; } .accordion:after { content: '\\2212'; } .active:after { content: "\\002B"; } } 
 <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> 

This solution using Javascript.

    If(window.innerWidth <= 768){
    this.classList.add("active");
    }

and this if you want to use JQuery

   // Returns width of browser viewport
   if($( window ).width() > 768){
   //If you want to add dynamically a class or remove one
   $('.selector').addClass(); // or removeClass()
   }

I hope this could help you

If you want to do it through JS, you can make use of Window.matchMedia :) 如果你想通过JS来实现它,你可以使用Window.matchMedia :)

 window.onload = ()=>{ var acc = document.getElementsByClassName("accordion"); var i; for (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 { panel.style.maxHeight = panel.scrollHeight + "px"; } }); } // our media query string let mql = window.matchMedia("screen and (min-width: 1281px)"); mediaQueryResponse(mql); // call the event handler at run time // listen for state changes mql.addListener(mediaQueryResponse); function mediaQueryResponse(mql){ for(let i = 0; i < acc.length; i++){ let pan = acc[i].nextElementSibling; if(mql.matches){ acc[i].classList.toggle('active'); pan.style.maxHeight = pan.scrollHeight + "px"; } else { pan.style.maxHeight = null; } } } } 
 .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; } .accordion:after { content: '\\002B'; color: #777; font-weight: bold; float: right; margin-left: 5px; } .active:after { content: "\\2212"; } .panel { padding: 0 18px; background-color: white; max-height: 0; overflow: hidden; transition: max-height 0.2s ease-out; } 
 <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> 

Also, here's a working example :) 另外,这是一个工作示例 :)

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

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