Да, существует множество способов изменить макет страницы между загрузками. Разные размеры окон, разные размеры шрифтов, разная доступность шрифтов, разные браузеры / настройки (даже небольшое изменение в разметке или предпочтениях шрифта может выкинуть обертку). Сохранение относительных координат страницы вряд ли будет полезным, если ваша страница почти не содержит изображений фиксированного размера.
Вы можете попытаться найти предков выбранного элемента, чтобы найти ближайший легко идентифицируемый элемент, а затем построить график от этого элемента до нужного элемента на основе того, каким дочерним номером он является.
Пример использования простого XPath синтаксиса:
document.onclick= function(event) {
if (event===undefined) event= window.event; // IE hack
var target= 'target' in event? event.target : event.srcElement; // another IE hack
var root= document.compatMode==='CSS1Compat'? document.documentElement : document.body;
var mxy= [event.clientX+root.scrollLeft, event.clientY+root.scrollTop];
var path= getPathTo(target);
var txy= getPageXY(target);
alert('Clicked element '+path+' offset '+(mxy[0]-txy[0])+', '+(mxy[1]-txy[1]));
}
function getPathTo(element) {
if (element.id!=='')
return 'id("'+element.id+'")';
if (element===document.body)
return element.tagName;
var ix= 0;
var siblings= element.parentNode.childNodes;
for (var i= 0; i<siblings.length; i++) {
var sibling= siblings[i];
if (sibling===element)
return getPathTo(element.parentNode)+'/'+element.tagName+'['+(ix+1)+']';
if (sibling.nodeType===1 && sibling.tagName===element.tagName)
ix++;
}
}
function getPageXY(element) {
var x= 0, y= 0;
while (element) {
x+= element.offsetLeft;
y+= element.offsetTop;
element= element.offsetParent;
}
return [x, y];
}
Вы можете увидеть это в действии, используя этот JSFiddle: http://jsfiddle.net/luisperezphd/L8pXL/