Por qué es el cuerpo.scrollTop obsoleto?


Parece que body.scrollTop (y body.scrollLeft) están obsoletos en el modo estricto ES5. ¿Cuál es la razón de esto, dado que todavía parece bien usar estas propiedades en otros DOMElements?

Información de fondo:

Tengo una función que intenta aumentar (o disminuir, como se especifica) los valores scrollTop de todos los antepasados de un element, hasta que uno de estos realmente cambia. Me pregunto si, para permanecer queja con strict-mode, debería comprobar específicamente contra el elemento body como la cadena de los padres se mueven hacia arriba.

[Obviamente, bodyse refiere a document.body]

Author: Himanshu P, 2013-10-28

3 answers

Es el propio comportamiento incorrecto de Chrome que está en desuso, y están advirtiendo a los autores a dejar de confiar en él.

La ventana de desplazamiento está representada por document.documentElement (<html>) en modo estándar o <body> en modo quirks. (Modo Quirks emula la representación de documentos de Navigator 4 y Explorer 5.)

Chrome utiliza body.scrollToppara representar la posición de desplazamiento de la ventana en ambos modos , lo cual es incorrecto. Parece que quieren arreglar esto así que están alentando a los autores a escribir para el comportamiento estándar.

No creo que necesites cambiar tu código. No hay nada de malo en usar body.scrollTop en modo estándar siempre y cuando entienda que representa la posición de desplazamiento de body solamente (típicamente 0, a menos que haya dado body una caja de desplazamiento).

Puede ver la advertencia ejecutando document.body.scrollTop en la consola:

body.scrollTop está en desuso en modo estricto. Utilice documentElement.scrollTop si está en modo estricto y body.scrollTop solo si está en modo rarezas.

 37
Author: sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-16 19:05:53

Me di cuenta de que mi código dejó de funcionar en las versiones más recientes de Chrome. Lo arreglé usando window.scrollY

Antes:

var scrollTop = document.body.scrollTop;

Ahora:

var scrollTop = window.scrollY;

Ahora funciona todo el tiempo. Puede encontrar más documentación aquí.

También, estaba usando:

document.body.scrollTop = 0;

Ahora lo reemplacé con:

window.scrollTo(0, 0);
 4
Author: Adrian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-06 20:16:42

ScrollTop se refiere a cuánto se desplaza el elemento. Esto significa que body no debe tener un scrollTop porque nunca se desplaza, body tiene la barra de desplazamiento superior por lo que su contenido se puede desplazar, pero no el propio body.
La última imagen de esta página explica mucho:
https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollTop

 -5
Author: Marvin Brouwer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-28 12:53:58