Javascript 使用jquery从整数中减去

Javascript 使用jquery从整数中减去,javascript,jquery,Javascript,Jquery,每次用户按下j键时,我想滚动到一个div。这是它的代码 $(function() { function scroll(direction) { var scroll, i, positions = [], here = $(window).scrollTop(), collection = $('.message_box'); collection.each

每次用户按下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');
   }
});

});
它将第一次滚动,但不会滚动其余时间。我总是得到整数218,它是要滚动到的第一个div的偏移量。 演示- 有人能帮我吗?

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

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

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


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

尝试在减号之间留出一些空格,以免将其误认为破折号

$('html,body').animate({“scrollTop”:$(scroll.offset().top-50});
或者先将数学保存在变量中

var scrollMinssWentown=$(scroll).offset().top-50;
$('html,body').animate({“scrollTop”:ScrollMinus});

试着在减号之间留出一些空格,以免被误认为破折号

$('html,body').animate({“scrollTop”:$(scroll.offset().top-50});
或者先将数学保存在变量中

var scrollMinssWentown=$(scroll).offset().top-50;
$('html,body').animate({“scrollTop”:ScrollMinus});

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

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

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

这样就可以将窗口滚动到当前元素上方50个像素。

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

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

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

这样,它就可以将窗口滚动到当前元素上方50像素的位置。

您能说得比“它不工作”更具体些吗?到底发生了什么事情不是你想要/期望的,你真正想要/期望的是什么?还有,有没有可能证明问题的存在?@AnthonyGrist你能比“它不起作用”更具体一点吗?AnthonyGrist@AnthonyGrist说,到底发生了什么事,而不是你想要/期望的,你真正想要/期望的是什么?还有,有没有可能发生一次可以证明问题的事件