javascript - jQuery 滚动功能不触发(滚动太快)

标签 javascript jquery performance scroll

我发现如果用户滚动得太快,下面的 jQuery 函数就不会触发。这是事件的 jQuery 检测中的性能问题/错误,还是我需要对我的代码做些什么?

...或者,有没有更好的方法 [至少在性能可靠性方面] 用纯 JavaScript 调用它?如果是这样,我该如何编码?

        $(window).scroll(function() {
            var st = $(this).scrollTop();
            if(st < 50){
                $('.header_wrapper').css({'marginTop':-50});
            } if(st < 40){
                $('.header_wrapper').css({'marginTop':0});
            }
        });

您可以在此处查看实际效果:http://www.walkingfish-grainboards.com/privacy-policy/

感谢您的帮助 - 将不胜感激。

最佳答案

由于您正在考虑性能:

$(window).on('scroll',function(){
    var st = $(this).scrollTop(),
        mTop = ((st < 40) ? 0 : -50);

    $('.header-wrapper').css({marginTop:mTop});
});

与其将赋值放在 if 中,不如将值放入,然后根据该值进行一次赋值。对于您当前的语句,-50px 值无论您向下走多远都将保持不变(因为您永远不会清除该值),并且只会在您滚动回顶部时返回到 0。因此,您不需要嵌套的 if 语句。

如果你真的想提高一个档次,包括缓存:

var scrollStuff = {
    headerWrapper:$('.header-wrapper'),
    onScroll:function(){
        var self = this,
            st = $(self).scrollTop(),
            mTop = ((st < 40) ? 0 : -50);

        self.headerWrapper.css({marginTop:mTop});
    }
};

$(window).on('scroll',function(){
    scrollStuff.onScroll();
});

通过缓存包括函数在内的所有内容,您无需每次都为要应用 marginTop 的元素重新查询 DOM。

关于javascript - jQuery 滚动功能不触发(滚动太快),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22081210/

相关文章:

Javascript 对象属性在控制台中可见,但未定义?

javascript - jQuery `.attr()` 不是函数

javascript - 加载页面后如何设置选择选项 'selected'?

java - 高效实现 Java native 接口(interface)网络摄像头源

javascript - 检查点击事件是否是由物理鼠标点击触发的?

javascript - 范围声明 json 对象的问题

Javascript Geolocation 纬度和经度变量在 asp.net 中的访问

javascript - 为 Ajax 使用 jQuery 而不是构建您自己的 JavaScript 是否值得?

python - intersection() 和 'object for object in set if object in other_set' 之间的速度差异

c# - 使用 EF 使用 sum 进行慢速 mysql 查询