获得锚点的偏移位置

我试图根据用户的选择将窗口滚动到我页面上的某个位置。 我得到了一些奇怪的结果。 任何人都可以建议一个好的/更好的方式去做这件事吗?

这是我正在使用的:

var rel = $(this).attr('rel'); var citation = rel.split("-")[0]; window.scrollTo(0, $('[name = ' + citation + ' ]').offset().top); alert($('[name = ' + citation + ' ]').offset().top); 

最后一个警报给了我一个似乎错误的数字,滚动不起作用。 当用户单击文档中的链接时,将执行以下代码。 我正在捕获该元素的rel属性值和(在一点点字符串操作之后)使用它来查找相应锚点的位置。 目标元素的name属性应与单击链接的rel属性匹配。 明白了吗?

谢谢!

这是滚动到html元素的另一种简单的oldschool方式:

 // scrolls to the element with id='citation' var node = document.getElementById('citation'); node.scrollIntoView(); 

您应该使用scrollTop而不是offset因为您的目标是尝试滚动窗口。

这段代码应该有效:

 var rel = $(this).attr('rel'); var citation = rel.split("-")[0]; window.scrollTo(0, $('[name = ' + citation + ' ]').scrollTop()); alert($('[name = ' + citation + ' ]').scrollTop()); 

不过,我想补充说,你的名字选择器不能保证是独一无二的,在这种情况下,你会得到奇怪的效果。 ID在页面上是唯一的,名称不一定是。 只是一个提示。

有类似的问题,但jQuery的scrollTo插件救了我的命。

我可以通过不使用offset()而不是使用jQuery的position()函数来解决这个问题。

我只是获取返回对象的“顶部”属性。 我必须使用元素的文本作为索引值,因为这些元素没有唯一的ID。

 var citationIndex = parseInt($(this).text() - 1); var elementOffset = $('.HwCitationsContent li:eq(' + citationIndex + ')').position().top;