/ / Obtenir la position verticale de la barre de défilement pour une page Web sur pageload lorsque l'URL contient une ancre - javascript, jquery, scrolltop

Obtenir la position verticale de la barre de défilement pour une page Web sur pageload lorsque l'URL contient une ancre - javascript, jquery, scrolltop

J'utilise la méthode scrollTop () de jQuery pour obtenir leposition verticale de la barre de défilement sur pageload. J'ai besoin d'obtenir cette valeur après l'exécution de l'ancre dans l'url (ex url: www.domainname.com # foo). Je peux utiliser le code suivant et cela fonctionne dans Firefox et IE:

ex url: www.domainname.com # foo

$(document).ready(function() {
if ($(this).scrollTop() > 0) {
// then a conditional statement based on the scrollTop() value
if ($(this).scrollTop() > $("#sidenav").height()) { ...

Mais dans le document Safari et Chrome.ready () semble s'exécuter avant l'ancre, donc scrollTop () renvoie 0 au chargement de la page dans ce scénario. Comment puis-je accéder à la valeur scrollTop () lors du chargement de la page après l'exécution de l'ancre dans Chrome et Safari?

Réponses:

4 pour la réponse № 1

Vous voudrez peut-être faire quelque chose de rapide et sale comme setTimeout pour autant de millisecondes qu'il faut pour l'obtenir de manière fiable depuis Chrome ou Safari

var MAX_CHECKS = 5;             // adjust these values
var WAIT_IN_MILLISECONDS = 100; // however works best
var checks = 0;

function checkScroll() {
if ($(this).scrollTop() > 0) {
// then a conditional statement based on the scrollTop() value
if ($(this).scrollTop() > $("#sidenav").height()) {
...
}
} else {
if (++checks < MAX_CHECKS) {
// just to make sure, you can try again
setTimeout(checkScroll, WAIT_IN_MILLISECONDS);
}
}
}

$(document).ready(function() {
// You can also throw in an if statement here to exclude
// URLs without # signs, single out WebKit browsers, etc.
setTimeout(checkScroll, WAIT_IN_MILLISECONDS);
...
});

Notez que vous pouvez également utiliser if ($.browser.webkit), bien que cette fonctionnalité soit obsolète et puisse être déplacée vers un plugin au lieu du jQuery principal (en faveur de la détection des fonctionnalités).