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 的 offest 中减去 50 才能滚动到它。

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

它会在第一次滚动,但不会在其余时间滚动。我总是得到整数218,这是要滚动到的第一个 div 的偏移量。演示 - http://jsfiddle.net/XP5sP/6/ 有人可以帮助我吗?

4

3 回答 3

1

$(scroll).offset().top-50完全有效,.top将返回一个整数值。因此,问题不在于您的这部分代码。

我怀疑问题与函数中的scroll变量有关scroll。在同一范围内,我总是避免将变量命名为与函数名称相同的名称。

于 2012-09-10T15:10:36.227 回答
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 回答
1

问题是您总是将值移动到第一个匹配元素之前scrollTop的50 像素,因此它总是将该元素标识为您需要在语句中滚动到的元素,因为它的位置大于当前值。ifscrollTop

将代码的相关部分修改为:

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

这样,它说明窗口被滚动到当前元素上方 50 像素。

于 2012-09-10T15:29:23.380 回答