首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery:切换滚动页上的标题类,如果页面不在顶部

问jQuery:切换滚动页上的标题类,如果页面不在顶部
EN

Stack Overflow用户
提问于 2014-11-20 15:27:16
回答 2查看 1.7K关注 0票数 3

我有一个jQuery片段,当用户滚动页面时,它会在页眉上切换类tinyHead。

代码语言:javascript
复制
jQuery(document).ready(function($) {
    $(window).on('scroll touchmove', function () {
        $('#header').toggleClass('tinyHead', $(document).scrollTop() > 0);
    });
});

但是,如果用户在页面向下滚动后刷新页面,那么页面重新加载时,tinyHead类不在头上,这就没有问题。如果他们然后滚动类切换。

我需要的是脚本检查页面是否位于视图端口的顶部,如果没有,则需要添加类tinyHead。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-20 15:31:32

这是正常的,如果用户不执行scroll或touchmove,或者执行附加函数的任何事件,则永远不会执行回调函数。

您必须至少触发附加的回调函数一次,只需在执行绑定后伪造滚动事件即可:

代码语言:javascript
复制
jQuery(document).ready(function($) {
    $(window).on('scroll touchmove', function () {
        $('#header').toggleClass('tinyHead', $(document).scrollTop() > 0);
    }).scroll();  // << Add this
});
票数 4
EN

Stack Overflow用户

发布于 2014-11-20 15:34:40

除了在滚动或触地移动事件中调用函数之外,您还必须在页面加载(或DOM就绪)时执行该函数。与其重复两次该函数,您还可以这样做:

代码语言:javascript
复制
jQuery(document).ready(function($) {
    var tinyHead = function() {
        $('#header').toggleClass('tinyHead', $(document).scrollTop() > 0);
    }

    // Call tinyHead() when DOM is ready / upon page load
    tinyHead();

    // Call tinyHead() when scroll or touchmove events are registered
    $(window).on('scroll touchmove', tinyHead);
});

p/s:在另一个注意事项上,您可能需要查看节流滚动事件 --有些浏览器“触发”了事件(即调用它太频繁)。由于tinyHead()是一个相当轻量级的函数,我个人认为控制滚动事件不会带来巨大的性能改进,但是如果您的tinyHead()函数计算量很大,您可能需要查看以下选项:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27043273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档