我正在进行api通话并在div
中显示信息。当我运行$(window).scrollTop($('#div').position().top)
时,它会返回top: 267px
的位置。在浏览器中查看相同的div时,其位置实际为top: 2058px
。
因此,当我运行代码时
window.addEventListener('message',function(event) {
if(window.location.href.indexOf('?queryParam=') > -1) {
$('.button').click(function(){
$(window).scrollTop($('#div').position().top);
});
}
return;
},false);
它滚动到top: 267px
而不是top: 2058px
,其中div实际上在浏览器中可见。
我的理论是因为div
不是静态的,而是通过api调用动态提取,在事件监听器中,它只考虑div在分秒时的位置。它已被检索并且尚未正确放置在浏览器中。
答案 0 :(得分:1)
您正在使用position().top获取div
的滚动位置
但这会给你div
相对于其父元素的位置
虽然在其他情况下非常方便,但在你的情况下,它并没有给出所需的价值。
在您的情况下,您需要div
相对于window
的位置,因为它是您正在滚动的window
。
为此,您需要使用offset().top,这将为您提供相对于文档的元素位置,无论元素在页面上的结构如何:
$(window).scrollTop($('#div').offset().top);