ドロップダウンメニューのいくつかの実装方法
5107 ワード
まず一般的なのがスライドダウンメニューで、CSSでもJSでもできます
親要素によってトリガーされ、子要素が親要素の状態を維持できるのは簡単です.
すべて原生で書かれています.
CSS実現方法:
JS実現方法:
2つ目は簡単で、ボタンをクリックして2級メニューをトリガーし、JSでトリガーするしかありません.
これは判断を下すだけで、難しくない.この効果はボタンをクリックするだけで、不便で、他の場所をクリックしてもキャンセルできる方法です.
これは、body要素をクリックしても隠すという意味ですが、ボタンをクリックしてドロップダウンメニューバーを呼び出すことができないことに気づきました.これはイベントキャプチャの問題です.ボタンをクリックすると、泡を立ててbody要素をクリックさせてくれたので、メニューを呼び出してメニューを閉じました.だから私たちは事件の泡を止めなければなりません.
ボタンのトリガ時に、イベントのパラメータeを持ち、e.stopPropagation()で泡が出るのを阻止すればよい
しかし、ページが複雑な場合は、他の任意の要素をクリックしてキャンセルする必要があります.ポイントの要素がボタンやドロップダウンメニューの要素かどうかを判断するには、まずJQueryのfnでメソッドを定義します
このclosestは親要素を探して、選択された要素の最初の祖先要素を返します.
詳細については、次の文書を参照してください.https://www.w3cschool.cn/jquery/traversing-closest.html
そして判断を加える
これにより、注文メニュー以外を隠すことができます.ただし、jqueryのjsファイルを先に導入することに注意してください.
親要素によってトリガーされ、子要素が親要素の状態を維持できるのは簡単です.
すべて原生で書かれています.
CSS実現方法:
JS実現方法:
document.getElementsByClassName('dropdown')[0].onmouseover = function () {
document.getElementsByClassName('dropdown-content')[0].style.display = 'block'
}
document.getElementsByClassName('dropdown')[0].onmouseout = function () {
document.getElementsByClassName('dropdown-content')[0].style.display = 'none'
}
2つ目は簡単で、ボタンをクリックして2級メニューをトリガーし、JSでトリガーするしかありません.
document.getElementsByClassName('dropdown')[0].onclick = function () {
if (document.getElementsByClassName('dropdown-content')[0].style.display == 'block') {
document.getElementsByClassName('dropdown-content')[0].style.display = 'none'
} else {
document.getElementsByClassName('dropdown-content')[0].style.display = 'block'
}
}
これは判断を下すだけで、難しくない.この効果はボタンをクリックするだけで、不便で、他の場所をクリックしてもキャンセルできる方法です.
document.getElementsByTagName('body')[0].onclick = function () {
document.getElementsByClassName('dropdown-content')[0].style.display = 'none'
}
これは、body要素をクリックしても隠すという意味ですが、ボタンをクリックしてドロップダウンメニューバーを呼び出すことができないことに気づきました.これはイベントキャプチャの問題です.ボタンをクリックすると、泡を立ててbody要素をクリックさせてくれたので、メニューを呼び出してメニューを閉じました.だから私たちは事件の泡を止めなければなりません.
ボタンのトリガ時に、イベントのパラメータeを持ち、e.stopPropagation()で泡が出るのを阻止すればよい
document.getElementsByClassName('dropdown')[0].onclick = function (e) {
e.stopPropagation();
if (document.getElementsByClassName('dropdown-content')[0].style.display == 'block') {
document.getElementsByClassName('dropdown-content')[0].style.display = 'none'
} else {
document.getElementsByClassName('dropdown-content')[0].style.display = 'block'
}
}
しかし、ページが複雑な場合は、他の任意の要素をクリックしてキャンセルする必要があります.ポイントの要素がボタンやドロップダウンメニューの要素かどうかを判断するには、まずJQueryのfnでメソッドを定義します
jQuery.fn.isChildAndSelfOf = function (b) {
return (this.closest(b).length > 0)
}
このclosestは親要素を探して、選択された要素の最初の祖先要素を返します.
詳細については、次の文書を参照してください.https://www.w3cschool.cn/jquery/traversing-closest.html
そして判断を加える
$(document).click(function (event) {
if (!$(event.target).isChildAndSelfOf('.dropdown')) {
$('.dropdown-content').hide();
}
});
これにより、注文メニュー以外を隠すことができます.ただし、jqueryのjsファイルを先に導入することに注意してください.