Quiero obtener la posición de un elemento en relación con la ventana gráfica del navegador (la ventana gráfica en la que se muestra la página, no toda la página). ¿Cómo se puede hacer esto en JavaScript?
Muchas gracias
javascript
Waleed Eissa
fuente
fuente
Respuestas:
Las respuestas existentes ahora están desactualizadas. El
getBoundingClientRect()
método nativo ha existido desde hace bastante tiempo y hace exactamente lo que pide la pregunta. Además, es compatible con todos los navegadores (¡al parecer, IE 5!)Desde la página de MDN :
El valor devuelto es un objeto TextRectangle, que contiene propiedades de solo lectura izquierda, superior, derecha e inferior que describen el cuadro de borde, en píxeles, con la parte superior izquierda relativa a la parte superior izquierda de la ventana gráfica .
Lo usas así:
fuente
getBoundingClientRect().top
no está en mi IE11, devuelve 0. ¿Tiene alguna solución?En mi caso, solo para estar seguro con respecto al desplazamiento, agregué el window.scroll a la ecuación:
Eso me permite obtener la posición relativa real del elemento en el documento, incluso si se ha desplazado.
fuente
getBoundingClientRect().top
no está en mi IE11, devuelve 0. ¿Tiene alguna solución?window.scrollY || window.pageYOffset
puede mejorar el soporteEditar: agregue un código para tener en cuenta el desplazamiento de la página.
El argumento id es el id del elemento cuyo desplazamiento desea. Adaptado de una publicación peculiar .
fuente
fuente
Puedes probar:
node.offsetTop - window.scrollY
Funciona en Opera con la metaetiqueta viewport definida.
fuente
offsetTop
es relativa al elemento posicionado más cercano. Que, dependiendo de la estructura de la página, puede ser o no un elemento raíz.jQuery implementa esto con bastante elegancia. Si nos fijamos en la fuente de jQuery
offset
, encontrará que esto es básicamente cómo se implementa:fuente
La función en esta página devolverá un rectángulo con las coordenadas superior, izquierda, altura y anchura de un elemento pasado en relación con el puerto de visualización del navegador.
fuente
fuente
fuente
Gracias por todas las respuestas. Parece que Prototype ya tiene una función que hace esto (la función page ()). Al ver el código fuente de la función, descubrí que primero calcula la posición de desplazamiento del elemento en relación con la página (es decir, la parte superior del documento), luego resta el scrollTop de eso. Vea el código fuente del prototipo para más detalles.
fuente
Supongo que un elemento que tiene una identificación de
btn1
existe en la página web, y también que jQuery está incluido. Esto ha funcionado en todos los navegadores modernos de Chrome, Firefox, IE> = 9 y Edge. jQuery solo se usa para determinar la posición relativa al documento.fuente
A veces,
getBoundingClientRect()
el valor de la propiedad del objeto muestra 0 para IE. En ese caso, debe configurardisplay = 'block'
el elemento. Puede usar el siguiente código para que todos los navegadores se compensen.Extienda la funcionalidad de jQuery:
Utilizar :
fuente