【问题标题】:How to get the div top position value while scrolling滚动时如何获取div顶部位置值
【发布时间】:2012-09-19 20:55:22
【问题描述】:

当 div 滚动到某个点时,我正在尝试运行一些脚本。有一个固定的导航,当用户滚动窗口时,它假设一旦接近导航就会更改导航名称。我正在使用 $(window).scroll 函数,但它只检查一次 div 位置而不更新值。如何让滚动检查每移动 5-10 px 的窗口大小,这样就不会占用太多内存/处理。 代码设置在:http://jsfiddle.net/rexonms/hyMxq/

HTML

<div id="nav"> NAVIGATION
  <div class="message">div name</div>
</div>
<div id="main">
<div id="a">Div A</div>
<div id ="b"> Div B</div>
<div id ="c"> Div C</div>
</div>​

CSS

#nav {
    height: 50px;
    background-color: #999;
    position:fixed;
    top:0;
    width:100%;

}

#main{
    margin-top:55px;
}
#a, #b, #c {
    height:300px;
    background-color:#ddd;
    margin-bottom:2px;
}

脚本

$(window).scroll(function() {

    var b = $('#b').position();

    $('.message').text(b.top);

    if (b.top == 55) {
        $('.message').text("Div B");
    }
});​

【问题讨论】:

  • 实际上是在每次滚动增量时检查b 的位置,但b 相对于文档的位置永远不会改变。请参阅@j08691 的回答。

标签: javascript jquery javascript-events


【解决方案1】:

试试这个jsFiddle example

$(window).scroll(function() {
    var scrollTop = $(window).scrollTop(),
        divOffset = $('#b').offset().top,
        dist = (divOffset - scrollTop);
    $('.message').text(dist);
    if (b.top == 55) {
        $('.message').text("Div B");
    }
});​

您的原始代码只是检查 div 相对于文档顶部的位置,该位置永远不会改变。您需要计算窗口所产生的滚动量并进行相应的计算。

还要注意 jQuery 的 .position().offset() 方法之间的区别。 .position() 方法允许我们检索元素相对于偏移父元素的当前位置。将此与 .offset() 进行对比,后者检索相对于文档的当前位置。

【讨论】:

  • 另外,b.top == 55 永远不会是真的。
  • @Shmiddty - 是的,但那只会变成if (dist==55)
  • 我怀疑这是 OP 试图做的事情的意图。我想应该是if (dist &lt; 55)
  • 使用纯js,如何检查?
猜你喜欢
  • 2017-07-03
  • 2014-04-03
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多