jQuery: Methode funktioniert richtig durch .click, aber nicht, wenn sie von document.ready direkt ausführen

StackOverflow https://stackoverflow.com/questions/4045437

Frage

Ich habe ein Stück von jQuery-Code, die - in der Theorie - nach unten scrollt auf einen bestimmten Teil des Fensters je nachdem, was ist nach dem Hash in dem URL-Tag (myaddress.html # wheretoscroll)

.

Der Code genannt, ist dies:

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

Das Problem ist, dass die Dokumentrollen an einen Ort gut aus seiner beabsichtigten Ausrichtung. Es wird Anker in der Nähe der Spitze fast richtig, aber scheint zu weit nach unten mit zunehmender Ungenauigkeit zu blättern, wie das Dokument untergeht.

Allerdings ...

Wenn ich den gleichen Code in einem .click laufen oder .hover Funktion, zum Beispiel:

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

es scrollt, um die genaue Lage sollte es sein. Ich gehe davon aus dem eine Art von Problem mit dem DOM ist nicht richtig an der Stelle des .ready gelesen werden? Irgendwelche Vorschläge für diese Korrektur (oder eine elegantere Möglichkeit der Auslösung der Aktion, sobald die Seite geladen wird, aber nicht direkt durch .ready) würde sehr geschätzt werden.

Wenn es darauf ankommt, die .scrollTo Plugin verwende ich hier gefunden werden kann: http : //flesler.blogspot.com/2007/10/jqueryscrollto.html

Prost ...

War es hilfreich?

Lösung

Versuchen Sie diese statt:

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

Teile Ihrer Seite fort zu laden, nachdem das DOM bereit ist. $(window).load() wird ausgelöst, wenn alle Ihre Inhalte geladen wird - einschließlich der Bilder.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top