jQueryのscrollTopスプライトを使用するときに手ぶれをなくします
質問
私は機能アップ矢印が押されたときに、キーボードの下矢印を押し上げとスクロールされる記事の次のセクションまでスクロールことを持っています。その作業罰金が、しかし、それはスクロールする直前にわずかな「バウンス」または「ジッター」があります。
私は関数の戻り偽を持っていることによって、この問題のために部分的に修正することができました、しかし、偽ツバメイベントダウンキーを返すブラウザと対話するために私のキーボード私にできない使用を残しています。
同時に私のキーボードを解放しながら、「ジッター」を解消する方法上の任意のアイデア?
var $sections = $('.section');
var curr = -1;
$(document).keydown(function(e){
prev = (curr < 0)? $sections.length-1: curr-1;
next = (curr >= $sections.length-1)? -1: curr+1 ;
switch (e.keyCode) {
case 38: // up key
s = $sections.eq(prev).offset().top;
curr = prev;
break;
case 40: // down key
s = $sections.eq(next).offset().top;
curr = next;
break;
default:
break;
}
if (curr == -1 ){
$('html, body').animate({scrollTop: 0}, 'slow');
}
else{
$('html, body').animate({scrollTop: s}, 'slow');
}
return e;
});
解決 2
おかげYiが...代替として...私はちょうどリターンeに、デフォルトのスイッチケースを設定することにより、仕事にそれを得ました。そして、関数が返すの虚偽の下部に復帰ます。
結果は次のようになります
var $sections = $('.section');
var curr = -1;
$(document).keydown(function(e){
prev = (curr < 0)? $sections.length-1: curr-1;
next = (curr >= $sections.length-1)? -1: curr+1 ;
switch (e.keyCode) {
case 38: // up key
s = $sections.eq(prev).offset().top;
curr = prev;
break;
case 40: // down key
s = $sections.eq(next).offset().top;
curr = next;
break;
default:
return e;
}
if (curr == -1 ){
$('html, body').animate({scrollTop: 0}, 'slow');
}
else{
$('html, body').animate({scrollTop: s}, 'slow');
}
return false;
});
他のヒント
おそらくあなたは、単にif
アップ一致するとダウンする場合にのみ、スクロールのコードを実行する単純なkeyCode
文を追加することができます:
$(document).keydown(function(e) {
if (e.keyCode === 38 || e.keyCode === 40) {
// Your code
return false;
}
});
ここでは、この簡単なデモが有効である: http://jsfiddle.net/yijiang/SceDY/ 1 / の
<時間>コードを見ると、あなたはおそらく、あなたの変数var
、prev
とnext
の範囲を限定するs
キーワードを使用する必要があります。不規則現在のコード振る舞い上下以外の何か他のものが押された場合。
所属していません StackOverflow