一旦它到达页面顶部(滚动时),如何将css添加到div?

时间:2011-12-23 17:53:29

标签: javascript jquery css

当用户向下滚动并到达某个div时,我想这样做,比如#float,将div设置为margin-top:50px并且位置固定,如果用户向上滚动则撤消这些更改。很难理解我知道)))如果你go to this page并且在上下滚动时注意侧边栏,你会明白我的意思。

当您向下滚动第二个广告时,页面也会滚动。

我如何使用jQuery / CSS实现相同的功能?

3 个答案:

答案 0 :(得分:3)

这是在jQuery中实现它的一种方式。

此代码仅供参考;几乎肯定有一些定期维护的jQuery插件会为你做这件事 - 检查GitHubDailyJS

$(window).scroll(function() {
    var styledDiv = $('#styledDiv'),
        targetScroll = $('#float').position().top,
        currentScroll = $('html').scrollTop() || $('body').scrollTop();

    styledDiv.toggleClass('fixedPos', currentScroll >= targetScroll);
});

以上是simple JSFiddle以上内容。

修改:现在已经将此代码重构为更优雅的解决方案。

编辑2 :在我收到有关问题的电子邮件后,我更新了上面的代码,以便它也适用于Firefox。由于$('body').scrollTop()无法在Firefox中使用(请参阅jQuery API page上的评论),因此我们需要同时检查htmlbody元素。

答案 1 :(得分:1)

这是该网站上使用的相关jQuery / JavaScript代码。

  if (window.XMLHttpRequest) {
    var topGagStay = $("top-gag-stay");
    var isLoggedIn = $("profile-menu") ? true : false;
    var sidebarAdsTop = 1061 - 545;
    var signupBtnOffset = 60;
    var dockPos = 72;
    if (!isLoggedIn && !GAG.isReadOnly()) {
      sidebarAdsTop += signupBtnOffset
    }
    if (formMessageShown) {
      sidebarAdsTop += formMessageOffset
    }
    if (topGagStay) {
      if (document.documentElement.scrollTop > sidebarAdsTop || self.pageYOffset > sidebarAdsTop) {
        if (topGagStay.style.position != "fixed") {
          topGagStay.style.position = "fixed";
          topGagStay.style.top = dockPos + "px"
        }
      } else {
        if (document.documentElement.scrollTop < sidebarAdsTop || self.pageYOffset < sidebarAdsTop) {
          topGagStay.style.position = "";
          topGagStay.style.top = ""
        }
      }
    }
  }

感谢FireBug和http://jsbeautifier.org/代码(当然还有9GAG)。

答案 2 :(得分:0)

我已经通过beardtwizzle尝试了上述答案,并且工作正常。还使它适用于页面滚动到页面底部的情况。

在此处查看工作demo /教程