window.scrollBy在Chrome和Safari中的哈希/锚点滚动之前触发

时间:2012-04-15 20:07:23

标签: javascript jquery

这是一个令人沮丧的问题。我在jQuery加载块的脚本中使用以下内容:

window.scrollBy(0,-100);

我这样做是因为我通过滚动设置了一个固定在页面顶部的div,这条线将进行补偿,以便看到你点击的锚点(http://page.html#foo)它应该在哪里。

它在Firefox中运行良好。在Chrome和Safari中,它没有,因为加载事件似乎发生在浏览器滚动到锚点之前。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,这是我的工作。 (实际上是一个黑客)

// Clicking on the navigation bar
$('.navbar-nav a').click(function(e) {
    // Blocking default clicking event
    e.preventDefault();
    // Scroll to the anchored element with a delay
    setTimeout(function() {$('#talks')[0].scrollIntoView();}, 5);
    // Compensate the scrolling with another delay
    setTimeout(function() {scrollBy(0, -$('#info').height())}, 10);
}

好像这是Safari的错误。

答案 1 :(得分:0)

我也遇到过这个问题。使用超时,甚至0毫秒,似乎没有可见的跳跃。试试这个:

window.setTimeout()
{
    window.scrollBy(0, -100);
}, 0);