Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 为什么在滚动父对象时position().top会发生变化?_Jquery_Position - Fatal编程技术网

Jquery 为什么在滚动父对象时position().top会发生变化?

Jquery 为什么在滚动父对象时position().top会发生变化?,jquery,position,Jquery,Position,jQuery返回 匹配元素集中第一个元素的当前坐标 元素,相对于偏移父元素 所以,滚动父对象不应该改变位置,对吗 我得到的结果是,在将父元素滚动100px之后,子元素的position().top将改变100 位置()。滚动1880前的顶部,滚动1780后的顶部 为什么?要回答评论中的问题,只需将框的滚动顶部添加到锚定元素的位置即可 因为$debug.offsetParent()是$('html')。该位置相对于父元素。本例中的父元素是可滚动的div#box。当您滚动到锚定图元附近时,它越来越

jQuery返回

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

所以,滚动父对象不应该改变位置,对吗

我得到的结果是,在将父元素滚动100px之后,子元素的
position().top
将改变100

位置()。滚动1880前的顶部,滚动1780后的顶部


为什么?

要回答评论中的问题,只需将框的滚动顶部添加到锚定元素的位置即可


因为
$debug.offsetParent()
$('html')
。该位置相对于父元素。本例中的父元素是可滚动的div#box。当您滚动到锚定图元附近时,它越来越靠近长方体顶部,从而导致顶部位置越来越小。如果删除溢出,则不会更改。但是改变它是有意义的,因为锚定元素越来越接近顶部,因为div由于溢出而可滚动。这是有意义的,我想我只是记住了错误的行为。那么,不管滚动,我如何得到它的位置呢?我想我需要一个包装器元素。你可以将父元素的滚动位置添加到结果中。嘿,谢谢。我让它与包装器元素一起工作,但这更好。
var $box = $('#box'),
    $anchored = $('#anchored'),
    $debug = $('#debug');

$debug.text('position().top before scroll ' + ($anchored.position().top + $box.scrollTop()));

$box.animate({
    scrollTop: 100
}).promise().then(function () {
    $debug.text($debug.text() + ', after scroll ' + ($anchored.position().top + $box.scrollTop()));
});