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 DOMElement
s?
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, body
se refiere a document.body
]
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.scrollTop
para 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. UtilicedocumentElement.scrollTop
si está en modo estricto ybody.scrollTop
solo si está en modo rarezas.
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);
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
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