0

次のjQueryコードがあります:

$('#staff_list').scroll(function(){
    var dif = scrollPrev - $('#staff_list').scrollTop();
    scrollPrev = $('#staff_list').scrollTop();
    var pos = parseInt($('.selected').css('margin-top')) + dif;
    var limit = $('.selected').position().top + parseInt($('.selected').css('margin-top'));

    if( limit < 474 ) {
        $('.selected').css('margin-top',pos + 'px');
    } 

});

このコードは、リストがスクロールされたときに確実に$('.selected')移動することを想定しています。ただし、移動量を制限し、リストの下部にある境界を維持し$('#staff_list')たいと考えています。$('.selected')

下限に達したときを除いて、すべてが機能しますが、$('.selected')(本来あるべきように)移動が停止しますが、その後完全に停止します!そのため、上にスクロールしても移動しなくなりました。限界に達したとき、私が何をしても永遠にそこにとどまるようなものです!

この予期しない動作の原因は何ですか?

4

2 に答える 2

0

問題はここにあります:

var limit = $('.selected').position().top + parseInt($('.selected').css('margin-top'));

if( limit < 474 ) {
    $('.selected').css('margin-top',pos + 'px');
} 

一度limit474 を超えると、位置を変更することはありません。したがってlimit、474 未満になることはありませんif(pos < limit)

于 2013-06-14T19:02:08.740 に答える
0

コードは、要素の位置に基づいて要素を移動するかどうかを決定するように見えます。そのため、その要素が移動しないはずのポイントに到達すると、単純に移動を停止します (どちらの方向にも)。

代わりにの.selectedに基づいて移動する必要があるかどうかを計算してみてください。scrollTop#staff_list

編集 - 変更してみてください

var limit = $('.selected').position().top + parseInt($('.selected').css('margin-top'));

var limit = pos + parseInt($('.selected').css('margin-top'));

于 2013-06-14T19:01:36.933 に答える