![](/img/trans.png)
[英]How to stop click event on resize & load if screen width is greater than?
[英]How I can restore an event when screen width is greater than specific width
當屏幕尺寸小於 987px 時,我想在菜單圖標上添加一個事件,將 header 向右移動 150px,當我再次單擊時,它會將 header -150 推向左側。 問題是當屏幕寬度大於 789 時,header 已相應移動,這是我不想要的。 當屏幕寬度大於 789 時,如何將 header 自動恢復為實際的 position?
你可以做 css 的例子
@media only screen and (max-width:987px) {
.menu{
margin-left:150px;
}
}
如果我正確理解你的問題,你想要你的按鈕點擊的條件行為 - 點擊應該適用於寬度小於 789px 的分辨率(這個問題沒有具體說明,但我假設你的意思是寬度)。
為此,您可以在下面的代碼中執行類似的操作(可以在此處找到適當的小提琴 - 在其中,您可以試驗文檔的寬度,這是您在 SO 上無法執行的操作)。
const nav = document.getElementsByTagName("nav")[0]; const btn = document.getElementById("clicker"); btn.addEventListener("click",moveHeader); function moveHeader() { let wd = window.innerWidth; console.log(wd); if(wd < 789) { nav.classList.toggle("moved"); } else { nav.classList.remove("moved"); } } window.addEventListener("resize", function() { if(this.innerWidth > 789) { nav.classList.remove("moved"); } });
#controller { display: inline-block; width: 100px; position: relative; border-right: 2px solid black; } button { margin: 15px auto; } #content { display: inline-block; overflow: hidden; } #content div, nav { display: block; } nav { width: 100%; background-color: #ccc; } nav a { padding: 15px; } #content div { margin-top: 15px; margin-left: 15px; }.moved { margin-left: 150px; }
<div id="controller"> <button id="clicker"> Click me </button> </div> <div id="content"> <nav> <a href="#">Home</a> <a href="#">Portfolio</a> <a href="#">Contact</a> </nav> <div> Lorem ipsum sit dolor amet etc </div> </div>
有幾點需要注意:
moved
包含將 header / 導航向右移動 (150px) 的 CSS 規則。 還有其他方法可以實現此目的( position: absolute
等),但為了說明起見,我決定使用最簡單的方法。nav {
width: 100%;
background-color: #ccc;
transition: 0.5s; /* this part here */
}
...
.moved {
margin-left: 150px;
transition: 0.5s; /* this part here */
}
moveHeader
函數)上切換。 使用toggle
的原因——你的用戶可能會一直點擊按鈕,它會一直發送 header / 導航,然后再拉回來。 因為我不知道你的頁面布局,這個解決方案會讓你打開和關閉導航,將它發送到屏幕外,然后把它帶回來等等
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.