¿Cuál es la forma correcta de obtener la posición de un elemento en la página en relación con la ventana gráfica (en lugar del documento)? jQuery.offset
la función parecía prometedora:
Obtenga las coordenadas actuales del primer elemento, o establezca las coordenadas de cada elemento, en el conjunto de elementos coincidentes, en relación con el documento.
Pero eso es relativo al documento. ¿Existe un método equivalente que devuelva compensaciones en relación con la ventana gráfica?
Respuestas:
Busque en el complemento Dimensiones, específicamente
scrollTop()
/scrollLeft()
. Puede encontrar información en http://api.jquery.com/scrollTop .fuente
La forma más sencilla de determinar el tamaño y la posición de un elemento es llamar a su método getBoundingClientRect () . Este método devuelve las posiciones de los elementos en las coordenadas de la ventana gráfica. No espera argumentos y devuelve un objeto con propiedades left, right, top e bottom . Las propiedades izquierda y superior dan las coordenadas X e Y de la esquina superior izquierda del elemento y las propiedades derecha e inferior dan las coordenadas de la esquina inferior derecha.
element.getBoundingClientRect(); // Get position in viewport coordinates
Soportado en todas partes.
fuente
getBoundingClientRect is not a function
$('#myElement')[0].getBoundingClientRect().top
(o cualquier otra posición)Aquí hay dos funciones para obtener la altura de la página y las cantidades de desplazamiento (x, y) sin el uso del complemento de dimensiones (hinchado):
fuente
jQuery.offset
debe combinarse conscrollTop
yscrollLeft
como se muestra en este diagrama:Manifestación:
fuente
Aquí hay una función que calcula la posición actual de un elemento dentro de la ventana gráfica:
Los valores devueltos se calculan así:
Uso:
Manifestación:
fuente
Descubrí que la respuesta de cballou ya no funcionaba en Firefox a partir de enero de 2014. Específicamente,
if (self.pageYOffset)
no se activó si el cliente se había desplazado hacia la derecha, pero no hacia abajo, porque0
es un número falso. Esto pasó desapercibido durante un tiempo porque Firefox admitíadocument.body.scrollLeft
/Top
, pero ya no me funciona (en Firefox 26.0).Aquí está mi solución modificada:
Probado y funcionando en FF26, Chrome 31, IE11. Es casi seguro que funcione en versiones anteriores de todos ellos.
fuente