當鼠標移動到元素上時,我想要獲取相對於元素內容區域左上角的鼠標座標(這是不包括填充的區域,邊框和輪廓)。聽起來很簡單,對吧?我至今是一個非常受歡迎的功能:獲取鼠標相對於元素內容區域的位置
function element_position(e) {
var x = 0, y = 0;
do {
x += e.offsetLeft;
y += e.offsetTop;
} while (e = e.offsetParent);
return { x: x, y: y };
}
而且我相對鼠標位置得到一個元素element
:
p = element_position(element);
x = mouseEvent.pageX - p.x;
y = mouseEvent.pageY - p.y;
這是不完全正確的。由於offsetLeft
和offsetTop
是元素的「外部」左上角與其偏移父級的「內部」左上角之間的差異,因此總和位置將跳過層次結構中的邊框和填充處的全部。
下面是一個比較,應該(希望)澄清我的意思。
- 如果我有距離的總和中的元素的「外部」左上角的偏移父母的「內部」左上角之間的位置(,外表面減去內部件;什麼,我現在在做什麼),我得到元素的內容區域的位置,減去偏移層次結構中的所有邊框和填充。
- 如果我得到元素的'外部'左上角和他們抵消父項的'外部'左上角之間的距離總和(外部減去外部),我得到元素的內容區域的位置,減去所需元素的邊界和填充(關閉,但不是那裏)。
- 如果我得到元素的「內部」左上角與其父親的內部左上角之間的距離總和(內部減號內部),則獲取元素內容區域的位置。這就是我要的。
我個人更喜歡不將CSS應用於畫布本身,而是將畫布包裹在用CSS裝飾的元素中。帶走很多PITA。 ;) – 2011-04-22 12:49:14
這是真的,我不會在我的畫布元素上應用填充/邊框。只是一個理論問題,真的。 – 2011-04-22 12:52:00
看起來'offsetLeft/Top'類型的獲取元素位置的方法不僅不符合目標元素的邊框和填充的大小,而且也包含所有偏移父元素的邊框和填充。請查看我重寫的問題,看看你是否可以考慮我的情況。 – 2011-04-22 13:30:27