Проблема заключается в том, что вы получаете доступ к верхнему / левому элементу области.
Элемент area не расположен там, где говорят его координаты.Домой / браузер обрабатывает это за кулисами.
Так что вам нужно найти изображение, к которому относится area
, и захватить его смещение.
var imgId = $(this).closest('map').attr('name');
var imgPos = $('#' + imgId).offset();
Затем вы беретеcoords
атрибут area
и разделить его, чтобы получить left
/ top
/ width
и использовать их, чтобы точно определить местоположение внутри изображения.
var coords = $(this).attr('coords').split(',');
var box = {
left: parseInt(coords[0],10),
top: parseInt(coords[1],10),
width: parseInt(coords[2],10)-parseInt(coords[0],10),
height: parseInt(coords[3],10)-parseInt(coords[1],10)
};
Примите во вниманиеширина / высота отображаемого информационного окна (, и поскольку вы его анимируете, примите это во внимание также ), и вы получите
x = imgPos.left + box.left + box.width/2 - 65; // 65 is the info width/2
y = imgPos.top + box.top -20 -160 -1; // 20 is the animation, 160 is the info height, 1 is a safe distance from the top
demo :http://www.jsfiddle.net/XBjwN/