web-dev-qa-db-fra.com

Pourquoi body.scrollTop est-il déconseillé?

Il semble body.scrollTop (et body.scrollLeft) sont obsolètes en mode strict ES5. Quelle est la raison de cela, étant donné qu'il semble toujours correct d'utiliser ces propriétés sur d'autres DOMElements?

Informations de fond:

J'ai une fonction qui essaie d'augmenter (ou de diminuer, comme spécifié) les valeurs scrollTop de tous les ancêtres d'un element, jusqu'à ce que l'un de ces changements change réellement. Je me demande si, pour ne pas me plaindre du mode strict, je devrais spécifiquement vérifier par rapport à l'élément body alors que la chaîne de parents monte.

[Évidemment, body fait référence à document.body]

35
Himanshu P

C'est le comportement incorrect de Chrome qui est déconseillé, et ils avertissent les auteurs de ne plus s'y fier.

La fenêtre de défilement est représentée par document.documentElement (<html>) en mode standard ou <body> en mode bizarreries . ( mode Quirks émule le rendu de document de Navigator 4 et Explorer 5.)

Chrome utilise body.scrollTop pour représenter la position de défilement de la fenêtre d'affichage dans les deux modes , ce qui est incorrect. Cela ressemble à ils veulent résoudre ce problème donc ils encouragent les auteurs à script pour le comportement standard.

Je ne pense pas que vous ayez besoin de changer votre code. Il n'y a rien de mal à utiliser body.scrollTop en mode standard tant que vous comprenez qu'il représente la position de défilement de body uniquement (généralement 0, sauf si vous avez donné à body une case de défilement).

Vous pouvez voir l'avertissement en exécutant document.body.scrollTop dans la console:

body.scrollTop est déconseillé en mode strict. Veuillez utiliser documentElement.scrollTop si en mode strict et body.scrollTop uniquement en mode bizarreries.

41
sam

J'ai remarqué que mon code ne fonctionnait plus sur les nouvelles versions de Chrome. Je l'ai corrigé en utilisant window.scrollY

Avant:

var scrollTop = document.body.scrollTop;

À présent:

var scrollTop = window.scrollY;

Cela fonctionne tout le temps maintenant. Vous pouvez trouver plus de documentation ici .

Aussi, j'utilisais:

document.body.scrollTop = 0;

maintenant je l'ai remplacé par:

window.scrollTo(0, 0);
9
Adrian