javascript - 使用 jquery 从整数中减去

标签 javascript jquery

我想在用户每次按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/ 有人可以帮助我吗?

最佳答案

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

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

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

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

关于javascript - 使用 jquery 从整数中减去,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12354458/

相关文章:

javascript - Promise 是否捕获了太多错误?

javascript - Angular 订阅被调用两次

jquery - 使用 jquery 和 ajax 解析 xml

jquery - 如何通过使用 jQuery 测试复选框的高值和低值来检查复选框?

javascript - 如何禁用具有相同值jQuery的所有菜单中的所有选项

javascript - JS视差多元素位置

javascript - 这些方法之间有什么技术上的区别吗?

javascript - 有没有办法使用 javascript 打开文件(与下载)文件?

php - 使用 CodeIgniter 在 jqgrid 中添加、编辑和删除反射(reflect)在数据库中的数据

javascript - 谷歌地图视差效果