jQuery:方法通过.click正常工作,但不能直接从document.ready运行

时间:2010-10-28 17:17:49

标签: javascript jquery binding scrollto

我有一段jQuery代码 - 理论上 - 根据URL标记中的哈希值(myaddress.html #wheretoscroll)向下滚动到窗口的特定部分。

调用的代码是:

$(document).ready(function() {
    anchor = unescape(self.document.location.hash.substring(1))
    if (anchor) {
        $.scrollTo('#anchor-' + anchor, 500, {offset:-150});
    }
}

问题是文档滚动到远离其预期对齐的位置。它几乎是靠近顶部的锚点,但随着文档的减少,似乎向下滚动的距离越来越不准确。

...然而

如果我在.click或.hover函数中运行相同的代码,例如:

$(document).ready(function() {
    $('body').hover(function() {
        anchor = unescape(self.document.location.hash.substring(1))
        if (anchor) {
            $.scrollTo('#anchor-' + anchor, 500, {offset:-150});
        }
    });
});

它滚动到它应该的确切位置。我假设这是一个问题,DOM在.ready时没有被正确读取?任何纠正这一点的建议(或者一旦页面加载就触发动作的更优雅的方式,但直接通过.ready)将非常感激。

如果重要,我可以在这里找到我正在使用的.scrollTo插件:http://flesler.blogspot.com/2007/10/jqueryscrollto.html

干杯...

1 个答案:

答案 0 :(得分:2)

请改为尝试:

$(window).load(function() {
    anchor = unescape(self.document.location.hash.substring(1))
    if (anchor) {
        $.scrollTo('#anchor-' + anchor, 500, {offset:-150});
    }
}

在DOM准备好后,页面的某些部分将继续加载。加载所有内容时会$(window).load()触发 - 包括图像。