我环顾四周,但我发现的所有答案只有在用户位于页面顶部时才有效 - 否则,它会将用户带到错误的位置,因为它没有&#39 ; t考虑用户向下滚动页面的程度。这就是我现在正在尝试的内容(' .sidebar a'是指向侧边栏中锚标记的链接,' .site-wrap'是可滚动的格):
$('.sidebar a').click(function() {
var $url = $(this).attr('href');
var $offset = $($url).offset(); //Getting the position of the anchor
var $currPos = $('.site-wrap').scrollTop(); //Getting the current scrolled position
$('.site-wrap').animate({
scrollTop: $offset.top - $currPos
}, 1000);
return false;
});
我似乎无法弄清楚它为什么不起作用。我是一个新手,所以它可能是微不足道的,但我会欣赏正确方向的任何指针。
答案 0 :(得分:0)
如果我没有弄错的话,你只想滚动元素的位置,无论当前的滚动位置如何。
所以应该将当前滚动位置从等式中取出并使用jQuery的 .position 函数而不是 .offset :
$('.sidebar a').click(function() {
var $url = $(this).attr('href');
var $offset = $($url).position(); //Getting the position of the anchor
$('.site-wrap').animate({
scrollTop: $offset.top
}, 1000);
return false;
});
如果当前元素是 .site-wrap 的直接子元素,则此方法有效。