获得锚点的偏移位置

时间:2009-07-23 17:20:18

标签: javascript jquery scroll

我正在尝试根据用户的选择将窗口滚动到我页面上的某个位置。我得到了一些奇怪的结果。任何人都可以提出一个好的/更好的方法来解决这个问题吗?

以下是我正在使用的内容:

 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属性匹配。明白我的意思?

谢谢!

5 个答案:

答案 0 :(得分:2)

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

// scrolls to the element with id='citation' 

var node = document.getElementById('citation');    
node.scrollIntoView();

答案 1 :(得分:1)

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

答案 2 :(得分:0)

这段代码应该有效:

var rel = $(this).attr('rel');
var citation = rel.split("-")[0];
window.scrollTo(0, $('[name = ' + citation + ' ]').scrollTop());
alert($('[name = ' + citation + ' ]').scrollTop());
但是,我会补充说,你的名字选择器不能保证是独一无二的,在这种情况下,你会得到奇怪的效果。 ID在页面上是唯一的,名称不一定是。只是一个提示。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

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