PF1
Me pregunto cómo puedo obtener la cantidad de píxeles (o medidas en general) desde un div hasta la parte superior de la ventana en Javascript. No estoy buscando un desplazamiento y en relación con el documento, simplemente en la parte superior de donde se muestra el navegador. Probé la solución “respondida” aquí: ¿Es posible obtener la posición de div dentro de la ventana del navegador? No dentro del documento. Dentro de la ventana, pero al menos en Safari, me encuentro con un problema en el que devuelve el mismo número sin importar dónde estén realmente los div.
¡Gracias por cualquier ayuda!
Las respuestas existentes ahora están desactualizadas. los getBoundingClientRect()
El método ha existido durante bastante tiempo y hace exactamente lo que pide esta pregunta. Además, es compatible con todos los navegadores.
De este página MDN:
El valor devuelto es un objeto TextRectangle, que contiene propiedades izquierda, superior, derecha e inferior de solo lectura que describen el cuadro de borde, en píxeles, con la parte superior izquierda en relación con la parte superior izquierda de la ventana gráfica.
Lo usas así:
var viewportOffset = el.getBoundingClientRect();
// these are relative to the viewport
var top = viewportOffset.top;
var left = viewportOffset.left;
-
Esto es mucho, mucho mejor. ¡Gracias!
– Codificador
19 de diciembre de 2013 a las 14:41
-
@HimanshuP: las cosas de MDN son apenas comprensibles (aunque no estoy seguro de si es su culpa) y su ejemplo de código no muestra un ejemplo que ilustre cómo podría funcionar esto en un entorno del mundo real.
– serraosays
2 de marzo de 2016 a las 16:57
-
Que hace
el
¿representar? como se usatop
yleft
para colocar el div? respuesta incompleta– Andrés
26 mayo 2017 a las 19:24
-
¡Excelente! Esto es genial, realmente útil 🙂
– Darragh Enright
25 de septiembre de 2019 a las 23:07
//Primero obtenga la geometría correcta para el navegador
(function(){
Run= window.Run || {};
if(window.pageYOffset!= undefined){
Run.topLeftScroll= function(hoo){
var wo= [window.pageXOffset, window.pageYOffset]
if(hoo && hoo.nodeType== 1){
hoo= mr(hoo);
var T= 0, L= 0;
while(hoo){
L+= hoo.offsetLeft;
T+= hoo.offsetTop;
hoo= hoo.offsetParent;
}
wo= [L, T, wo[0], wo[1]];
}
return wo;
}
}
else if(document.body.scrollTop!== undefined){
Run.topLeftScroll= function(hoo){
var B= document.body;
var D= document.documentElement;
D= (D.clientHeight)? D: B;
wo= [D.scrollLeft, D.scrollTop];
if(hoo && hoo.nodeType== 1){
hoo= mr(hoo);
var T= 0, L= 0;
while(hoo){
L+= hoo.offsetLeft;
T+= hoo.offsetTop;
hoo= hoo.offsetParent;
}
wo= [L, T, wo[0], wo[1]];
}
return wo;
}
}
})()
// función de atajo
if(window.Run && Run.topLeftScroll){
Run.getPosition= function(who, wch){
var A= Run.topLeftScroll(who);
if(!wch) return A;
switch(wch.toUpperCase()){
case 'X': return A[0];// element Left in document
case 'Y': return A[1];// element Top in document
case 'L': return A[0]-A[2];// Left minus scroll
case 'T': return A[1]-A[3];// Top minus scroll
case 'SL': return A[2];// scroll Left
case 'ST': return A[3];// scroll Top
default: return 0;
}
// all returns are integers (pixels)
}
}
Peka
Vea lo que JS Frameworks tiene para ofrecer. En su mayoría, han resuelto todos, o al menos la mayoría, de los problemas y especialidades específicos del navegador.
En Prototype, están los DesplazamientoDesplazamiento() funciones No estoy lo suficientemente familiarizado con JQuery para indicarle la página correcta del manual, pero aquí hay una pregunta que parece ir en la dirección correcta.
-
No creo que haya una sola función jQuery para devolver este valor, pero las matemáticas simples con $(‘#my-div’).offset().top y $(document).scrollTop() deberían hacer el truco.
– Matchú
25 de diciembre de 2009 a las 0:52
He esquilado un poco y encontré esto:
function getOffsetPosition(el_id, side){
element = document.getElementById(el_id);
newNode = document.createElement("div");
newNode.innerHTML = "<div style=\"height: 12px;\"></div>";
element.insertBefore(newNode, element.firstChild);
iVal = 0;
oObj = element;
var sType = "oObj.offset"+side;
while (oObj && oObj.tagName != "html") {
iVal += eval(sType);
oObj = oObj.offsetParent;
}
element.removeChild(newNode);
return iVal;
}
Si eso te puede ayudar ^^
ricardo h
Esta respuesta le dice cómo obtener las coordenadas x e y de un elemento con respecto al origen (arriba a la izquierda) de un documento. Solo necesita agregar el valor .scrollTop a la coord y para obtener la distancia en píxeles desde div hasta la parte superior de la ventana gráfica.
-
También debe restar window.pageXOffset y window.pageYOffset, como en la respuesta de @kennebec.
– Sean el Frijol
26 de abril de 2012 a las 14:12
-
También debe restar window.pageXOffset y window.pageYOffset, como en la respuesta de @kennebec.
– Sean el Frijol
26 de abril de 2012 a las 14:12
Recomendar nuevo título: “Posición de div relativa a la parte superior de la mirador“
– Matchú
25 de diciembre de 2009 a las 0:54
Gracias Matchu: he actualizado el título.
– PF1
25 de diciembre de 2009 a las 1:01
Matchu significaba VerPuerto (que es un sinónimo de la ventana del navegador).
– Peka
25 de diciembre de 2009 a las 1:06
Hola Pekka: Ups, lo corregí al título correcto.
– PF1
25 de diciembre de 2009 a las 1:20