【问题标题】:Sticky header snapping to top to early粘性标题捕捉到顶部到早期
【发布时间】:2016-02-25 20:25:51
【问题描述】:

我一直在玩弄这段代码。我在我的网站上实现了一个粘性导航,它应该在用户滚动时标题变得看不见时激活。标题 div 位于导航 div 上方。粘性部分工作正常,但它激活得太快了。一旦我开始滚动,它就会立即捕捉到顶部,然后一旦标题再次出现,它就不会恢复到原来的位置。

这是使它工作的 jquery:

(function($) {

  var $body,
    $target,
    targetoffsetTop,
    resizetimer,
    stickyclass = 'sticky'

  function updateCoords() {
    targetoffsetTop = $target.offset().top
  }

  function makesticky() {                     //Sets the sticky class to activate once  
    var scrollTop = $(document).scrollTop()   //the scroll offset is greater than 
    if (scrollTop >= targetoffsetTop) {        //how far the div is from the top.
      if (!$body.hasClass(stickyclass)) {
        $body.addClass(stickyclass)
      }
    } else {                        
      if ($body.hasClass(stickyclass)) {
        $body.removeClass(stickyclass)
      }
    }
  }

  $(window).on('load', function() {
    $body = $(document.body)
    $target = $('#header_lg')              //This is the target div that get's sticky
    updateCoords()
    $(window).on('scroll', function() {
      requestAnimationFrame(makesticky)
    })
    $(window).on('resize', function() {
      clearTimeout(resizetimer)
      resizetimer = setTimeout(function() {
        $body.removeClass(stickyclass)
        updateCoords()
        makesticky()
      }, 50)
    })
  })

})(jQuery)

CSS:

#header_lg {          //Before sticky
  width: 100%;
  height: 75px;
  padding: .7%;
  background-color: blue;
  -webkit-transition: height 1s, width 1s;
  -moz-transition: height 1s, width 1s;
  transition: height 1s, width 1s;
}
body.sticky #header_lg {   //After sticky
  position: fixed;
  top: 0;
  left: 0;
  height: 100px;
  width: 100%;
}

我对 javascript 还很陌生,因此我们非常感谢各位专家就代码为什么不能正常工作提出的任何建议。如果它很重要,则页面采用引导格式,因此它位于visible-lg 类中,其中container 类设置为style="width:100%; margin:0; padding:0;"。 HTML 代码只是一个带有一些填充文本的空 div。

【问题讨论】:

  • 我试过你的代码here。它不粘,但它会在正确的时间激活......?
  • 嗯,这很奇怪......粘性部分实际上是因为我的 cmets 格式错误,所以我只是删除了它们并且代码运行良好......知道可能出了什么问题吗?跨度>
  • @GCyrillus 的示例使用带有固定 cmets 的代码对我有用。如果您的实施仍然无法正常工作,包括该修复程序,我不确定它可能是什么。在做同样的事情时我注意到的一件事是某些浏览器使用不同的变量作为偏移值,你使用的是什么浏览器?
  • @Toni 我用的是 FF W7 .. 用最新的检查:opera/chrome/IE 工作。旧胜 Safari 5.1.7.(7534.57.2) 失败!但是有人还在用这个吗? :)
  • 它是否与它位于引导容器中这一事实有关?我还在那个容器上设置了边距,这也导致了一些冲突,一旦标题变得粘稠并延伸到右边缘,标题就会忽略右边距。如果粘性代码没有问题,那么它一定是与引导程序@GCyrillus的一些冲突

标签: javascript css scrolltop sticky


【解决方案1】:

你的 CSS cmets 没有写正确(不同于 js)

try this:(感谢@Toni 有用的笔,我在这里叉出演示)

#header_lg {          /*Before sticky*/
  width: 100%;
  height: 75px;
  padding: .7%;
  background-color: blue;
  -webkit-transition: height 1s, width 1s;
  -moz-transition: height 1s, width 1s;
  transition: height 1s, width 1s;
}
body.sticky #header_lg {   /*After sticky*/
  position: fixed;
  top: 0;
  left: 0;
  height: 100px;
  width: 100%;
}

【讨论】:

  • 她*和我无论如何都不会介意,但感谢您的贡献!
  • 没问题,我得到了很多,也许我应该开始在网上使用我的中间名哈哈
猜你喜欢
  • 1970-01-01
  • 2013-10-19
  • 2011-07-04
  • 1970-01-01
  • 2016-09-13
  • 2020-12-13
  • 2017-10-29
  • 2019-05-25
  • 2010-11-04
相关资源
最近更新 更多