我在嘗試構建一個菜單,可以從右側滑入子項並允許用戶返回,如果需要的話。使用CSS和jQuery的移動菜單
雖然左側滑動元素有效,但後退按鈕不會刪除該類,儘管jQuery會告訴它如果<li>
具有「返回」類。
我在邏輯中錯過了一些明顯的東西嗎?我也嘗試設置non-back元素有一個類,並設置jQuery僅在按下時運行,但仍然無效。
下面的代碼的筆至今:https://codepen.io/chops07876/pen/VbewZd
我在嘗試構建一個菜單,可以從右側滑入子項並允許用戶返回,如果需要的話。使用CSS和jQuery的移動菜單
雖然左側滑動元素有效,但後退按鈕不會刪除該類,儘管jQuery會告訴它如果<li>
具有「返回」類。
我在邏輯中錯過了一些明顯的東西嗎?我也嘗試設置non-back元素有一個類,並設置jQuery僅在按下時運行,但仍然無效。
下面的代碼的筆至今:https://codepen.io/chops07876/pen/VbewZd
點擊事件被冒泡和觸發父李點擊。使用stopPropagation()
可以防止出現這種情況,並將點擊事件限制爲您單擊的元素。 https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation
$('li').on('click',function(e) {
e.stopPropagation();
if ($(this).hasClass('back')) {
$(this).parent().parent().parent().removeClass('hide');
} else {
$(this).parent().addClass('hide');
}
});
a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}table{border-collapse:collapse;border-spacing:0}
\t \t body {
\t \t \t font-family: Arial, sans-serif;
\t \t }
\t \t
\t \t ul {
\t \t \t width: 100vw;
\t \t \t position: absolute;
\t \t \t background: #fff;
\t \t \t left: 0;
\t \t \t top: 0;
\t \t \t list-style: none;
\t \t \t -ms-transition: all .3s ease-in-out;
\t \t \t -webkit-transition: all .3s ease-in-out;
\t \t -moz-transition: all .3s ease-in-out;
\t \t -o-transition: all .3s ease-in-out;
\t \t transition: all .3s ease-in-out;
\t \t }
\t \t ul.sub-menu {
\t \t \t left: 100vw;
\t \t }
\t \t ul.show {
\t \t \t left: 0;
\t \t }
\t \t ul.hide {
\t \t \t left: -100vw;
\t \t }
\t \t ul.sub-menu.hide {
\t \t \t left: 0;
\t \t }
\t \t ul li {
\t \t \t padding: 10px;
\t \t \t border-bottom: 1px solid #eee;
\t \t \t cursor: pointer;
\t \t }
\t \t ul li.back {
\t \t \t background: red;
\t \t \t color: #fff;
\t \t }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="level-1">
<li>Level One - Item One
<ul class="sub-menu level-2">
<li class="back">Back</li>
<li>Level Two - Item One
<ul class="sub-menu level-3">
<li class="back">Back</li>
<li>Level Three - Item One
<ul class="sub-menu level-4">
<li class="back">Back</li>
<li>Level Four - Item One
<ul class="sub-menu level-5">
<li class="back">Back</li>
<li>Level Five - Item One</li>
<li>Level Five - Item Two</li>
<li>Level Five - Item Three</li>
</ul>
</li>
<li>Level Four - Item Two</li>
<li>Level Four - Item Three</li>
</ul>
</li>
<li>Level Three - Item Two</li>
<li>Level Three - Item Three</li>
</ul>
</li>
<li>Level Two - Item Two</li>
<li>Level Two - Item Three</li>
</ul>
</li>
<li>Level One - Item Two</li>
<li>Level One - Item Three</li>
</ul>
添加event.stopPropagation()
到li
的點擊
$('li').click(function() {
event.stopPropagation();
if ($(this).hasClass('back')) {
$(this).parent().parent().parent().removeClass('hide');
} else {
$(this).parent().addClass('hide');
}
});
我會使用closest()
代替parent().parent().parent()
$(this).closest('.level-1').removeClass('hide');
非常感謝這個丹。使用.closet()註釋,我需要這個動作,因爲有多個子菜單級別。有沒有更乾淨的方法來做到這一點? – user1235285
您將修改您的HTML結構。 –
在什麼意義上?子菜單不得不坐在裏面,但課程可以改變。你能解釋一下你的意思嗎? – user1235285
謝謝建議邁克爾。 – user1235285
@ user1235285不客氣。我很好奇你爲什麼選擇別人的回答 - 我們回答同樣的問題,他們在我做完5分鐘後回答。你介意告訴我嗎? –
對不起!我誤讀了時代... – user1235285