jquery - 当用户滚动超过 10px 时如何运行函数?

标签 jquery html css

我正在尝试找到一种在用户滚动时触发功能的方法。但只有当用户滚动超过 x 量(比如 10 像素)时,才能避免意外/微小的页面滚动。

我目前有一个横跨页面顶部的固定导航栏。当用户向下滚动时,添加类“retreat”,隐藏导航栏。当用户向上滚动时,类 'retreat' 被删除:

$(function(){
    var previousScroll = 0;
    navOffset = $('nav').height()
});

$(window).scroll(function () {
    var currentScroll = $(this).scrollTop();
    if (currentScroll > navOffset) {
        if (currentScroll > previousScroll) {
            $('nav').addClass("retreat");
        } else {
            $('nav').removeClass("retreat");
        }
    } 
    previousScroll = currentScroll;
});

但是,这经常会在鼠标最轻微的触摸或移动时意外运行。有没有办法忽略非常小的滚动,只在用户滚动超过 10px 时才运行该函数?

查看此 fiddle 以获得工作演示:http://jsfiddle.net/mymymy/An3LZ/

最佳答案

只需额外检查两个滚动位置之间的差异(40 是单击滚动条上的向上/向下滚动图标在 Chrome 中移动页面的像素数量,如您所见更改适合):

Demo Fiddle

将您的 JS 更改为以下内容:

var previousScroll = 0,
    navOffset = $('nav').height()

$(window).scroll(function () {

    var currentScroll = $(this).scrollTop();
    if (currentScroll > navOffset) {
        if (Math.abs(currentScroll - previousScroll) > 40) {
            if (currentScroll > previousScroll) {
                $('nav').addClass("retreat");
            } else {
                $('nav').removeClass("retreat");
            }
        }
    }
    previousScroll = currentScroll;
});

关于jquery - 当用户滚动超过 10px 时如何运行函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24782908/

相关文章:

javascript - 如何将动态生成的div id传递给ajax?

javascript - jQuery 修复了在滚动时缩小到较小尺寸的导航栏是 super 马车

html - 去掉我网站底部页脚上方的空白

javascript - 为什么 Firefox 不接受 -moz-transition 样式?

jQuery 1.8 位置无法正常工作

html - CSS 没有响应,图像也没有加载

javascript - GZIP是浏览器自动解压的吗?

javascript - 为什么我的复选框返回错误的状态?

jquery - Json 对象数组长度

html - 试图让两个按钮保持在一个网格的状态栏中