問題のページのライブバージョンは次のとおりです:http://agoodman.com.au/index1.html
Bootstrapを使用して1ページのWebサイトを構築しており、scrollToを使用してさまざまなセクションを上下にスクロールしています。次のコードが付いた上部のナビゲーションバーがあります。
<ul class="nav">
<li class="active"><a href="#intro" onclick="$.scrollTo( '#intro', 600 );">Top</a></li>
<li><a href="#service" onclick="$.scrollTo( '#service', 600 );">What we do</a></li>
<li><a href="#howitworks" onclick="$.scrollTo( '#howitworks', 600 );">How it works</a></li>
<li><a href="#fees" onclick="$.scrollTo( '#fees', 600 );">Our fees</a></li>
<li><a href="#why" onclick="$.scrollTo( '#why', 600 );">Why do it?</a></li>
<li><a href="#map" onclick="$.scrollTo( '#map', 600 );">Map</a></li>
<li><a href="#contact" onclick="$.scrollTo( '#contact', 600 );">Contact</a></li>
</ul>
マウスでナビゲーションバーをクリックすると、スクロールは正常に機能し、奇妙な動作はまったくありません。次に、このjqueryコードを使用して、キーボードの上下矢印でナビゲーションバーを制御しています。
$(document).keyup(function(e) {
var p = $("li.active");
if (e.keyCode === 38) {
p.prev().find("a").click();
} else if (e.keyCode === 40) {
p.next().find('a').click();
}
});
これは、ほとんどの場合、機能します。ただし、解決したい問題が2つあります。
1.上/下を押すと、ページが1つ小さなジャンプで上下に移動し(Webサイトで矢印キーを押すように)、次のdivにスクロールします。event.preventDefualt();を入れてみました。jquery if / elseステートメントで、しかしそれは何もしませんでした。ここでデフォルトのアップ/ダウンアクションを防ぐ方法についてのアイデアはありますか?
2.「上」キーを押すと、ページが1つではなく2つのセクションを上にスクロールします。たとえば、「#why」セクションに移動し、を押します。「#fees」までスクロールしてから、「#howitworks」まで再度スクロールします。おそらくscrollspy.jsがここで競合していますか?
これで正しい方向に向けられていただければ幸いです。
乾杯