変更これまであなたの関数:
var page = $("html, body");
$("section").click(function(e) {
page.on("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove", function(){
page.stop();
});
page.animate({ scrollTop: $(this).position().top }, 'slow', function(){
page.off("scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove");
});
return false;
});
これは以下となります。
- ストップアニメーション場合のみ、アニメーション中に手動でユーザーがスクロール( )
- は通常のjQueryのアニメーションを妨げない、他の回答のようにいくつかのでしょう
いくつかの追加情報:なぜあなたはこれらのイベントの全てに結合されている
? 「スクロールマウスホイールなど...」
スクロールイベントにはさまざまな種類があります。マウス、キーボード、タッチスクリーンなどを使用して下にスクロールすることができます。これで、すべてをキャッチします。
var page = $("html, body");
はどのような用途ですか?どこでも$("html, body")
を使用できませんか?
同じセレクタを複数回使用する場合は、variableにキャッシュすることをお勧めします。書き込み/使用が容易になり、毎回セレクタを再計算するよりもパフォーマンスが向上します。
.animate()
と.stop()
の詳細はどこにありますか?
.animate()と.stop()のjQueryドキュメントを読むことができます。この原則には.stop()
が働くので、animation queue'sについて読むことをお勧めします。
ありがとう、それは完璧に動作します。ちょうど質問、私は要素のクリックを無視したいのでハイパーリンクには影響しません、セレクタでは "section:not(a)"を試みましたが、うまくいきません。リンクを無視するようにセレクタを編集できますか? – lisovaccaro
これは役立つはずです:http://stackoverflow.com/questions/2457246/jquery-click-function-exclude-children –
バインドされていたものから「スクロール」と「キーアップ」を削除しなければならないことがわかりました。最初に '$( 'section')'をクリックしたときに '.stop()'が起動されました(この例を使用) – Crimbo