Esta es probablemente una pregunta realmente simple, pero ¿cómo puedo obtener el desplazamiento correcto de un elemento en jQuery?
Puedo hacer:
$("#whatever").offset().left;
y es válido.
Pero parece que:
$("#whatever").offset().right
es indefinido.
Entonces, ¿cómo se logra esto en jQuery?
¡¡Gracias!!
$whatever[0].getBoundingClientRect().right
. esto es relativo al borde izquierdo de la ventana.var $whatever = $('#whatever'); var ending_right = ($(window).width() - ($whatever.offset().left + $whatever.outerWidth()));
Referencia: .outerWidth ()
fuente
var rt = ($(window).width() - ($whatever.offset().left + $whatever.outerWidth()));
Tal vez no haya entendido bien su pregunta, pero se supone que el desplazamiento le da dos variables: una horizontal y una vertical. Esto define la posición del elemento. Entonces, lo que estás buscando es:
$("#whatever").offset().left
y
$("#whatever").offset().top
Si necesita saber dónde está el límite correcto de su elemento, entonces debe usar:
$("#whatever").offset().left + $("#whatever").outerWidth()
fuente
Solo una adición a lo que dijo Greg:
Este código obtendrá la posición correcta en relación con el lado izquierdo. Si la intención era obtener la posición del lado derecho en relación con el derecho (como cuando se usa la
right
propiedad CSS ), entonces es necesaria una adición al código de la siguiente manera:Este código es útil en animaciones en las que debe establecer el lado derecho como un ancla fija cuando inicialmente no puede establecer la
right
propiedad en CSS.fuente
En realidad, estos solo funcionan cuando la ventana no se desplaza en absoluto desde la posición superior izquierda.
Debe restar los valores de desplazamiento de la ventana para obtener un desplazamiento que sea útil para reposicionar elementos para que permanezcan en la página:
var offset = $('#whatever').offset(); offset.right = ($(window).width() + $(window).scrollLeft()) - (offset.left + $('#whatever').outerWidth(true)); offset.bottom = ($(window).height() + $(window).scrollTop()) - (offset.top + $('#whatever').outerHeight(true));
fuente
Hay una API DOM nativa que logra esto de inmediato
getBoundingClientRect
:document.querySelector("#whatever").getBoundingClientRect().right
fuente
Brendon Crawford tuvo la mejor respuesta aquí (en el comentario), así que lo moveré a una respuesta hasta que lo haga (y tal vez lo amplíe un poco).
var offset = $('#whatever').offset(); offset.right = $(window).width() - (offset.left + $('#whatever').outerWidth(true)); offset.bottom = $(window).height() - (offset.top + $('#whatever').outerHeight(true));
fuente
Conseguir el punto de anclaje de
div/table (left) = $("#whatever").offset().left;
... ¡ok!Para obtener el punto de anclaje de un
div/table (right)
, puede usar el siguiente código.$("#whatever").width();
fuente