私のサイトのナビゲーションドロップダウンには問題がありますが、私はほとんど解決していますが、修正できません。私はちょうど私のコードから混乱を起こしたかもしれないと心配しています。外をクリックするとドロップダウンメニューが表示されます
preventDefaultイベントで「アンカータグへのスクロール」機能を導入したときに、ナビゲーションメニューが表示されませんでした。もう一度メニューボタンをクリックしない限り、メニューは閉じません。私は最終的にあなたがリンクの1つをクリックした後にそれを閉じるようにしましたが、それは今それを閉じるための唯一の方法です。メニューボタンをクリックするか、サイトのどこか他の場所をクリックすると、どうすれば閉じることができますか?私はjQueryの少しが原因だと確信していますが、それを修正する方法やそれを回避する方法はわかりません。
メニューのためのHTML:
<div class="main-nav navbtn">
<div class="dropdown"><i onclick="myFunction()" class="dropbtn material-icons md-48"></i>
<div id="myDropdown" class="dropdown-content">
<a href="#home" class="home navlink">Home</a>
<a href="#about" class="navlink">About</a>
<a href="#services" class="navlink">Services</a>
<a href="#work" class="navlink">Work</a>
<a href="#testimonials" class="navlink">Testimonials</a>
<a href="#contact" class="navlink">Contact</a>
<a href="http://blog.ignitiondesignpdx.com" target="_blank" class="external navlink">Blog</a>
</div>
</div>
</div>
および関連のjQuery:
// When the user clicks on the button, toggle between hiding and showing the dropdown content
function myFunction() {
document.getElementById("myDropdown").classList.toggle("show");
}
//// Close the dropdown menu if the user clicks outside of it
window.onclick = function (event) {
if (!event.target.matches('.dropbtn')) {
dropdowns.forEach(function (openDropdown) {
dropdown.classList.contains('show') && dropdown.classList.remove('show');
});
}
};
////This is the section I made for it to close after clicking a link
jQuery(document).ready(function ($) {
$('.dropbtn').on('click', function() {
$(".dropdown-content").show();
});
$('.navlink').on('click', function() {
$(".dropdown-content").hide();
});
});
これは、他の機能を台無しだ潜在的な問題があります。
//Scroll to anchor tags
$(document).on('click', 'a:not(.external)', function (event) {
event.preventDefault();
$('html, body').animate({
scrollTop: $($.attr(this, 'href')).offset().top
}, 500);
});
var $root = $('html, body');
$('a').click(function() {
$root.animate({
scrollTop: $($.attr(this, 'href')).offset().top
}, 500);
return false;
});
メニューを修正するにはどうすればよいですか?
アップデートで作業中のサイトを見てみることができます:私は、私は物事が混乱しているところでリードを持っていると思います。私がドロップダウン機能を追加するために使用している関数では、.dropbtn要素がクリックされるとクラス "show"が追加され、再度クリックされると削除される必要があります。
私が本当にやる必要があるのは、.dropbtnをクリックするとドロップダウンが開き、ナビゲーションボタンと.dropbtn要素を含む何かをクリックするとコードが閉じるというコードを修正することです。
更新2:別の方法を試してください。その最初の更新を無視します。
ドキュメント上にクリックイベントリスナーを設定し、そこからクローズをトリガーします。 –
@VanquishedWombatどうすればいいのですか? – KreigD
リスナをドキュメントレベルで設定するには $(document).on( "click"、function(){{...あなたのターゲット要素をテストし、ここから閉じる}}; –