Estoy acostumbrado a trabajar con jQuery. Sin embargo, en mi proyecto actual uso zepto.js. Zepto no proporciona un position()
método como lo hace jQuery. Zepto solo viene con offset()
.
¿Alguna idea de cómo puedo recuperar el desplazamiento de un contenedor en relación con un padre con js puro o con Zepto?
JavaScript
etiqueta cuando use JavaScript puro. Si está utilizando un marco o biblioteca, entonces no utiliza laJavaScript
etiqueta. Si te llamas Jeff, no te llamaría Sally.Respuestas:
Advertencia: jQuery, no JavaScript estándar
element.offsetLeft
yelement.offsetTop
son las propiedades de javascript puro para encontrar la posición de un elemento con respecto a suoffsetParent
; siendo el elemento padre más cercano con una posición derelative
oabsolute
Alternativamente, siempre puede usar Zepto para obtener la posición de un elemento Y su padre, y simplemente restar los dos:
Esto tiene el beneficio de darle el desplazamiento de un niño en relación con su padre, incluso si el padre no está posicionado.
fuente
static
no son padres compensados.en js puro solo use
offsetLeft
yoffsetTop
propiedades.Violín de ejemplo: http://jsfiddle.net/WKZ8P/
fuente
p.offsetTop + p.parentNode.offsetTop
Podría envolver esto en una llamada de función recursiva muy similar a PPK propuesto hace unos años. Podrías alterar la función para pasar el número de niveles a subir o usar un selector para imitar$(selector).parents(parentSelector)
. Preferiría esta solución porque la implementación de zepto solo funciona en los navegadores compatiblesgetBoundingClientsRect
, lo que algunos móviles no.getBoundingClientsRect
tenía un amplio respaldo ... si alguien sabe qué móviles no lo admiten, estaría interesado (no puedo encontrar ninguna tabla de soporte para móviles al respecto).$(this).offset().left
athis.offsetLeft
.jQuery.position()
comportamiento incorrecto dentro de un padre transformado en 3D, ¡muchas gracias!Lo hice así en Internet Explorer.
=================== puedes llamarlo así
Me concentro en IE solo según mi enfoque, pero se pueden hacer cosas similares para otros navegadores.
fuente
Agregue el desplazamiento del evento al desplazamiento del elemento principal para obtener la posición de desplazamiento absoluto del evento.
Un ejemplo :
Cuando el destino del evento no es el elemento en el que se registró el evento, agrega el desplazamiento del padre al desplazamiento del evento actual para calcular el valor de desplazamiento "absoluto".
Según la API web de Mozilla: "La propiedad de solo lectura HTMLElement.offsetLeft devuelve el número de píxeles que la esquina superior izquierda del elemento actual está desplazada a la izquierda dentro del nodo HTMLElement.offsetParent " .
Esto ocurre principalmente cuando registra un evento en un elemento primario que contiene varios elementos secundarios más, por ejemplo: un botón con un ícono interno o un espacio de texto, un
li
elemento con tramos internos. etc ...fuente
Ejemplo
Entonces, si tuviéramos un elemento hijo con una identificación de "elemento hijo" y quisiéramos obtener su posición izquierda / superior en relación con un elemento padre, digamos un div que tenía una clase de "elemento padre", tendríamos usa este código.
Complemento Finalmente, para el complemento real (con algunas notas que explican lo que está sucediendo):
fuente
Tengo otra solución. Restar el valor de la propiedad principal del valor de la propiedad secundaria
fuente
Claro que es fácil con JS puro, solo haga esto, trabaje también para paneles HTML 5 fijos y animados, hice e intento este código y funciona para cualquier navegador (incluido IE 8):
fuente