div中的scrolltop在jquery中不起作用

aka*_*ash 7 jquery jquery-animate

scrolltop当我为身体滚动设置动画时,我想在div中制作动画,它对我来说很好

但是,当我使用它时,div它失败了.

这对我来说很好 http://jsfiddle.net/yazaLyxs/

$('body').animate({
    scrollTop: $('#myId').offset().top
}, 'slow');
Run Code Online (Sandbox Code Playgroud)

那为什么这段代码不起作用?

$('.myClass').animate({
    scrollTop: $('#myId').offset().top
}, 'slow');
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/qVWuv/198/

Rok*_*jan 5

好吧,因为没有人准确回答到底是怎么回事:

.position().top不考虑元素的边距。 jsFiddle 演示


您的第一个示例可能适用于 Chrome,但不适用于 Firefox,因为documentElement.

为了解释它,你必须使用:

$('html, body').animate({
Run Code Online (Sandbox Code Playgroud)

.position()现在,让我们看看Methods和之间的区别.offset()

。位置()

获取匹配元素集中第一个元素相对于偏移父元素的当前坐标。

。抵消()

获取第一个元素的当前坐标,或设置匹配元素集中每个元素相对于文档的坐标。

如果上面的内容很清楚,并且您想获取定位父级*child内的内部元素位置,则需要使用. .position()

#parent {
    height: 300px;
    background: teal;
    margin: 500px 0 0 0;
    overflow:scroll;
    position:relative; /* NEEDED! */
}
Run Code Online (Sandbox Code Playgroud)

现在,您可能已经将内部元素的边距设置为500px,但它的顶部位置仍然是0px!

console.log( $('#child').position().top ); // 0
Run Code Online (Sandbox Code Playgroud)

因此,您需要为元素设置top:样式(而不是margin) 和才能使用:http://jsfiddle.net/RokoCB/qVWuv/203/ (或者至少在其或某些内容之前放置一些其他元素)。position:#save$('#child').position().top

*如果您没有为父元素设置“position:”CSS 属性,则需要减去父元素的顶部位置或偏移量。