スクロールに応じてアクティブなメニュー要素を変更するダイナミックメニューでウェブサイトを作成しようとしています。私はこれに似た他の質問を見ていて、別のコードを試していましたが、問題を解決できず、なぜ私のサイトでうまくいかないのか分かりません。JQueryでアクティブなダイナミックメニューを作成する
私は今では右のように私のコードを持っている:https://jsfiddle.net/49rcfg0t/
$(document).ready(function() {
$(document).on("scroll", onScroll);
//smoothscroll
$('a[href^="#"]').on('click', function (e) {
e.preventDefault();
$(document).off("scroll");
$('a').each(function() {
$(this).removeClass('active');
})
$(this).addClass('active');
});
});
function onScroll(event){
var scrollPos = $(document).scrollTop();
$('.topmenu a').each(function() {
var currLink = $(this);
var refElement = $(currLink.attr("href"));
if (refElement.position().top <= scrollPos && refElement.position().top + refElement.height() > scrollPos) {
$('.topmenu a').removeClass("active");
currLink.addClass("active");
}
else{
currLink.removeClass("active");
}
});
}
<link rel="stylesheet" type="text/css" href="portfolio2.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<!--Menu superior-->
<nav class="header">
<div>
<a href="#anchor1" class="topmenu">
<img src="http://es.seaicons.com/wp-content/uploads/2016/05/Number-1-icon.png">
<span id="profile">Menu 1</span>
</a>
<a href="#anchor2" class="topmenu">
<img src="http://es.seaicons.com/wp-content/uploads/2016/05/Number-2-icon.png">
<span id="exp">Menu 2</span>
</a>
<a href="#anchor3" class="topmenu">
<img src="http://es.seaicons.com/wp-content/uploads/2016/05/Number-3-icon.png">
<span id="hab">Menu 3</span>
</a>
<a href="#anchor4" class="topmenu">
<img src="http://es.seaicons.com/wp-content/uploads/2016/05/Number-4-icon.png">
<span id="pro">Menu 4</span>
</a>
<a href="#anchor5" class="topmenu">
<img src="http://es.seaicons.com/wp-content/uploads/2016/05/Number-5-icon.png">
<span id="contact">Menu 5</span>
</a>
</div>
</nav>
<div class="cuerpo">
<span class="anchor" id="anchor1"></span>
<div style="background-color:blue">Area 1</div>
<span class="anchor" id="anchor2"></span>
<div style="background-color:red">Area 2</div>
<span class="anchor" id="anchor3"></span>
<div style="background-color:yellow">Area 3</div>
<span class="anchor" id="anchor4"></span>
<div style="background-color:brown">Area 4</div>
<span class="anchor" id="anchor5"></span>
<div style="background-color:green">Area 5</div>
</div>
私は次のような問題があります。
- 私は手動要素が活性化されないスクロールします。
- リンクを使用すると要素がアクティブになりますが、アンカー申請には の回答はありません。
- また、 メニューの要素の1つを有効にして、別のメニューでイメージを変更したいと思います。例えば、この1と 最初のアイコンを変更します。
この問題は狂気私を運転している、事前にありがとうございます!
はオーバーフロー(y)の状態では、実際にあなたの窓ですか?また、$(document)の代わりに$(window)を試してください –
$( 'topmenu a') 'は' $( '。header a') 'または' $( 'a.topmenu' 'onScroll'関数内に現れます)。現在のように、セレクタは '.topmenu'要素の子であるアンカーを探していますが、コード内のアンカーはそれらの子ではない' .topmenu'要素です。 –