Вот такая изящная функция для опреления абсолютных координат элемента:
function getAbsolutePos(el) { var r = { x: el.offsetLeft, y: el.offsetTop }; if (el.offsetParent) { var tmp = getAbsolutePos(el.offsetParent); r.x += tmp.x; r.y += tmp.y; } return r; }
работает не правильно, если на одном из элементов прокручен скроллбар..
Comment by dzone — 07.11.2007 @ 18:00
Вся соль, как всегда, в определениях. Что значит “правильно” и “неправильно”, по-вашему?
Comment by Val Petruchek — 11.11.2007 @ 17:31
var getRect = (function(){
if (document.getBoxObjectFor)
return function(e){
var b = document.getBoxObjectFor(e);
// alert(b.x+” , “+b.x+b.width+” , “+b.y+” , “+b.y+b.height);
return [b.x, b.x+b.width, b.y, b.y+b.height];
}
if (document.body.getBoundingClientRect)
return function(e){
var b = e.getBoundingClientRect(), s = getScroll();
//alert(b.left+” , “+b.right+” , “+b.top+” , “+b.bottom);
return [b.left+s[0], b.right+s[0], b.top+s[1], b.bottom+s[1]];
}
return function(e){
var x=0, y=0, w=e.offsetWidth, h=e.offsetHeight, s = getScroll();
for(; e!=null; e = e.offsetParent){
x += e.offsetLeft;
y += e.offsetTop;
}
// alert(x+” , “+y);
return [x+s[0], x+w+s[0], y+window.screenTop+s[1], y+h+window.screenTop+s[1]];
}
})()
Comment by lemur — 29.05.2008 @ 11:32
на IE не работает
Comment by Михаил — 06.11.2009 @ 03:28
А на IE не работает скорее всего из-за скобок… попробуй
Comment by Truin — 07.07.2010 @ 11:33
А на IE не работает скорее всего из-за скобок… попробуй
Comment by Truin — 07.07.2010 @ 11:33
А на IE не работает скорее всего из-за скобок… попробуй
Comment by Truin — 07.07.2010 @ 11:33
див:
получение координат (включая IE):
var ex=0, ey=0;
function A(mEvent)
{
if (typeof(mEvent)==”undefined”) mEvent = window.event;
obj = (mEvent.srcElement)?mEvent.srcElement:mEvent.target;
ex = (typeof(mEvent.offsetX)!=”undefined”)?mEvent.offsetX:mEvent.layerX;
ey = (typeof(mEvent.offsetY)!=”undefined”)?mEvent.offsetY:mEvent.layerY;
document.getElementById(”vvv”).innerHTML=” “+kart+”: x= “+ex+” ; y= “+ey;
};
Comment by D_A_N — 15.12.2010 @ 07:36