Je souhaite exécuter l'événement onscroll
de la fenêtre, mais je ne sais pas pourquoi il ne fonctionne pas sur tous les navigateurs (firefox, chrome, etc.) et aucune erreur ne s'est produite.
Code complet:
var elem = document.getElementById('repeat');
var show = document.getElementById('show');
for (i = 1; i <= 300; i++) {
elem.innerHTML += i + "<br/>";
}
window.onscroll = function () {
show.innerHTML = document.body.scrollTop;
};
#show {
display:block;
position:fixed;
top:0px;
left:300px;
}
<pre id="repeat"></pre>
<div style="position:relative;">
<div id="show">x</div>
</div>
Aussi jsfiddle: http://jsfiddle.net/sqo0140j
Quel est le problème?
Vous avez dit quelque chose d'intéressant:
x changé à 0 et reste tel quel.
La seule manière possible dans votre code est que le bloc de fonction onscroll
apporte une modification, car votre code HTML définit x.
Si votre window.onscroll = function()
est en effet en train de tirer, mais que vous n'obtenez pas la bonne position de défilement (c'est-à-dire 0), essayez de modifier le mode de renvoi de la position de défilement:
window.onscroll = function () {
show.innerHTML = document.documentElement.scrollTop || document.body.scrollTop;
};
J'ai découvert que document.documentElement.scrollTop
renvoie toujours 0 sur Chrome. En effet, WebKit utilise body
pour garder la trace du défilement, mais Firefox et IE utilisent html
.
Veuillez essayer votre extrait mis à jour:
var elem = document.getElementById('repeat');
var show = document.getElementById('show');
for (i = 1; i <= 300; i++) {
elem.innerHTML += i + "<br/>";
}
window.onscroll = function () {
show.innerHTML = document.documentElement.scrollTop || document.body.scrollTop;
};
#show {
display:block;
position:fixed;
top:0px;
left:300px;
}
<pre id="repeat"></pre>
<div style="position:relative;">
<div id="show">x</div>
</div>
On a répondu à cette question, mais je voulais inclure des détails sur ma situation qui empêchent onscroll de fonctionner.
J'ai un conteneur de données qui a sa propre barre de défilement qui remplace la barre de défilement de la fenêtre intégrée. Je n'ai pas remarqué cela jusqu'à ce que je commence à jeter un regard plus approfondi sur les éléments de la page à l'aide du développeur Chrome. Ma balise externe ressemblait à ceci,
Cela a provoqué l'apparition de deux barres de défilement à gauche. En effet, la propriété overflow: auto demandait au conteneur de données de créer une autre barre de défilement.
Une fois le débordement supprimé: auto, je pouvais maintenant corriger l’événement onscroll.
Pour moi, l'instruction document.body.scrollTop;
fonctionne bien dans Chrome et Opera, mais sous Firefox, elle renvoie 0.
Viceversa, l'instruction document.documentElement.scrollTop;
fonctionne bien sur Firefox mais pas sur Chrome et Opera ...
Peut-être que document.body.scrollTop;
n'est pas bien pris en charge par FF
J'ai essayé:
Math.max(document.body.scrollTop, document.documentElement.scrollTop);
et
document.body.scrollTop || document.documentElement.scrollTop;
Ils fonctionnent tous les deux bien sur tous les navigateurs ci-dessus.