首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery在滚动时添加类,但不在初始加载时添加类

问jQuery在滚动时添加类,但不在初始加载时添加类
EN

Stack Overflow用户
提问于 2018-08-31 08:29:06
回答 3查看 99关注 0票数 1

我在这里有这个代码,它根据滚动位置添加和删除类,这甚至可以在初始加载时工作,但我不想让它工作,我该如何防止这种情况?

代码语言:javascript
复制
jQuery(window).scroll(function () {

  var scroll = jQuery(window).scrollTop();

  console.log(scroll);

  if (scroll >= 100) {
    jQuery("#banner").addClass("sticky");
  } else if (scroll == 0) {
    jQuery("#banner").removeClass("sticky");
  }

  if (scroll > 0) {
    jQuery(".navigation-top").addClass("sticky");
  } else if (scroll == 0) {
    jQuery(".navigation-top").removeClass("sticky");
  }

});

当您刷新页面且滚动条不为0时,问题出现在初始加载上

EN

回答 3

Stack Overflow用户

发布于 2018-08-31 10:05:12

您可以在scroll函数中使用一个带有if语句的布尔变量来确定代码是否应该运行。

在这里,我们通过将变量设置为true onload来禁用代码,然后在scroll上将其设置为false,以允许函数执行。

代码语言:javascript
复制
var onload_functionDisable = true;

jQuery(window).scroll(function() {

    if (onload_functionDisable == false) {
        var scroll = jQuery(window).scrollTop();

        console.log(scroll);

        if (scroll >= 100) {
            jQuery("#banner").addClass("sticky");
        } else if (scroll == 0) {
            jQuery("#banner").removeClass("sticky");
        }

        if (scroll > 0) {
            jQuery(".navigation-top").addClass("sticky");
        } else if (scroll == 0) {
            jQuery(".navigation-top").removeClass("sticky");
        }
    }
    onload_functionDisable = false;
});

编辑前面的代码是错误的,将始终运行。因此,现在我们通过将onload_functionDisable = false;移到scroll function的底部来改进它。因此,在加载时,scroll功能被禁用,但一旦它跳过scroll代码,该变量就被设置为false,从而为下一个scroll事件启用代码。

我有一个可以工作的simplified jsfiddle showing this.

票数 1
EN

Stack Overflow用户

发布于 2018-08-31 09:34:24

当您刷新页面且滚动条不为0时,问题出现在初始加载上

好的..。我想到的唯一解决方案是:

在加载时,您将强制scrollTop为零。

然后注册scroll事件处理程序。

代码语言:javascript
复制
$(window).scrollTop(0);

$(window).scroll(function () {

  var scroll = $(window).scrollTop();
  console.log(scroll);

  $("#banner").toggleClass("sticky", scroll >= 100 );
  $(".navigation-top").toggleClass("sticky", scroll > 0 );
});

第二个参数是在两种情况下都返回true/false的条件。

票数 0
EN

Stack Overflow用户

发布于 2021-10-29 20:17:20

我遇到了同样的问题,并在这里找到了解决方案:https://www.py4u.net/discuss/959392这个示例有点不同,但解决了相同的问题:

在专用函数中分隔修复头部的回调:

代码语言:javascript
复制
function FixHeader() {
    if ( $( window ).scrollTop() > 170 ) {
        $( '.header' ).addClass( 'sticky' );
    }
    else {
        $( '.header' ).removeClass( 'sticky' );
    }
}

将回调绑定到scroll事件:

代码语言:javascript
复制
$( window ).scroll( FixHeader );

最后:

让回调在DOM就绪时被调用:

代码语言:javascript
复制
$( FixHeader );

这是一种简写

代码语言:javascript
复制
$( document ).ready( FixHeader );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52107001

复制
相关文章

相似问题

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