0

ユーザーがjキーを押すたびに div にスクロールしたい。これがそのコードです。

$(function() {
    function scroll(direction) {

        var scroll, i,
                positions = [],
                here = $(window).scrollTop(),
                collection = $('.message_box');

        collection.each(function() {
            positions.push(parseInt($(this).offset()['top'],0));
        });

        for(i = 0; i < positions.length; i++) {
            if (direction == 'next' && positions[i] > here) { scroll = collection.get(i); break; }
            if (direction == 'prev' && i > 0 && positions[i] >= here) { scroll = collection.get(i); break; }
        }

        if (scroll) {
        $('html, body').animate({"scrollTop": $(scroll).offset().top-50});
            $(scroll).css('color', 'blue');
            $(scroll).mouseleave(function() {
            $(this).css('color', 'black');
            });
        }

        return false;
    }

    $("#next,#prev").click(function() {        
        return scroll($(this).attr('id'));        
    });
$('body').keyup(function(event) {
  if (event.which == 74) {
     return scroll('next');
   }
});
$('body').keyup(function(event) {
  if (event.which == 75) {
     return scroll('prev');
   }
});

});

これをスクロールするには、div のオフセットから 50 を引く必要があります。

$('html, body').animate({"scrollTop": $(scroll).offset().top-50});

最初はスクロールしますが、残りの時間はスクロールしません。スクロールする最初のdivのオフセットである整数218を常に取得します。デモ - http://jsfiddle.net/XP5sP/6/ 誰か助けてくれませんか?

4

3 に答える 3

1

$(scroll).offset().top-50.top整数値を返すので、完全に有効です。したがって、問題はコードのこの部分にはありません。

問題はscroll、関数内にある変数に関係していると思われscrollます。同じスコープ内にある場合は、変数に関数名と同じ名前を付けないようにします。

于 2012-09-10T15:10:36.227 に答える
1

問題は、最初に一致した要素の前にscrollTop値を常に 50 ピクセルに移動しているため、その位置現在の値よりも大きいため、ステートメントでスクロールする必要がある要素として常にその要素を識別していることです。ifscrollTop

コードの関連セクションを次のように変更します。

if (direction == 'next' && positions[i] > here + 50) {
    scroll = collection.get(i);
    break;
}

こうすることで、ウィンドウが現在の要素の 50 ピクセル上までスクロールされます。

于 2012-09-10T15:29:23.380 に答える
1

ダッシュと間違えないように、マイナス記号の間にスペースを入れてみてください。

$('html, body').animate({"scrollTop": $(scroll).offset().top - 50});

または、最初に数学を変数に保存します

var scrollMinusFifty = $(scroll).offset().top - 50;
$('html, body').animate({"scrollTop":scrollMinusFifty});
于 2012-09-10T15:22:27.720 に答える