Acabo de pasar un tiempo serio resolviendo algunas cosas con React y desplazando eventos / posiciones, así que para aquellos que todavía están buscando, esto es lo que encontré:
La altura de la vista se puede encontrar usando window.innerHeight o mediante document.documentElement.clientHeight. (Altura de la ventana gráfica actual)
La altura de todo el documento (cuerpo) se puede encontrar usando window.document.body.offsetHeight.
Si está intentando encontrar la altura del documento y saber cuándo ha tocado fondo, esto es lo que se me ocurrió:
if (window.pageYOffset >= this.myRefII.current.clientHeight && Math.round((document.documentElement.scrollTop + window.innerHeight)) < document.documentElement.scrollHeight - 72) {
this.setState({
trueOrNot: true
});
} else {
this.setState({
trueOrNot: false
});
}
}
(Mi barra de navegación tenía 72 píxeles en posición fija, por lo tanto, el -72 para obtener un mejor desencadenador de evento de desplazamiento)
Por último, aquí hay una serie de comandos de desplazamiento a console.log (), que me ayudaron a descubrir mis matemáticas activamente.
console.log('window inner height: ', window.innerHeight);
console.log('document Element client hieght: ', document.documentElement.clientHeight);
console.log('document Element scroll hieght: ', document.documentElement.scrollHeight);
console.log('document Element offset height: ', document.documentElement.offsetHeight);
console.log('document element scrolltop: ', document.documentElement.scrollTop);
console.log('window page Y Offset: ', window.pageYOffset);
console.log('window document body offsetheight: ', window.document.body.offsetHeight);
¡Uf! Espero que ayude a alguien!
.bind(this)
de los argumentos de devolución de llamada ya que está vinculado por el constructor.this.state = { width: 0, height: 0 };
para que los vars de estado no cambien sus tipos (si entiendo correctamente window.innerWidth es entero ). No cambia nada, excepto que hace que el código sea más fácil de entender en mi humilde opinión. ¡Gracias por la respuesta!this.state = { width: window.innerWidth, height: window.innerHeight };
comenzar?