我正在尝试根据用户的选择将窗口滚动到我页面上的某个位置。我得到了一些奇怪的结果。任何人都可以提出一个好的/更好的方法来解决这个问题吗?
以下是我正在使用的内容:
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属性匹配。明白我的意思?
谢谢!
答案 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;