マウスポインタ-標準の書き方

11489 ワード

通常、インタラクティブな効果を書くときには、マウスポインタがある座標位置をよく使います.ブラウザによって解析の仕方が異なり、計算上の差異が生じることがよくあります.標準的で互換性の良い書き方を以下に示します.
1.ページ内のポインタの座標位置
属性選択:pageX、pageY-DOM標準
ClientX、clientY-怪奇IE
     document.documentElement-DOM規格
     document.body-怪奇IE
関数:
 1 function getP(e){
2
3       var e = e || window.event;
4
5       return {
6
7         x : e.pageX || e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft),
8
9         y : e.pageY || e.clientY + (document.documentElement.scrollTop || document.body.scrollTop)
10
11       }
12
13    }

 
2.エレメント内のポインタの座標位置
属性選択:offsetX、offsetY-(Safariは要素の外壁の左上隅を原点とし、他のブラウザは内壁の左上隅を原点とする;Mozillaはサポートしない)
LayerX、layerY-互換Mozillaは、要素に含まれるブロックを参照オブジェクトとし、要素自体の左上隅ではなくoffsetLeft、offsetTopを減算する必要があります.
関数:
 1 function getEP(e,o){
2
3       var e = e || window.event;
4
5       var bl = parseInt(getStyle(o,"borderLeftWidth")) || ((o.style.borderLeftStyle && o.style.borderLeftStyle != "none") ? 3 : 0);
6
7       // getStyle() 《js スタイル の - な 》,3
8
9       var bt = parseInt(getStyle(o,"borderTopWidth")) || ((o.style.borderTopStyle && o.style.borderTopStyle != "none") ? 3 : 0);
10
11       var x = e.offsetX || (e.layerX - o.offsetLeft - bl); // x
12
13       var y = e.offsetY || (e.layerY - o.offsetTop - bt); // y
14
15       // Safari, , 。
16
17       var u = navigator.userAgent;
18
19       if((u.indexOf("KHTML") > -1) || (u.indexOf("Konqueror") > -1) || (u.indexOf("AppleWebKit") > -1) ){
20
21         x -= bl;
22
23         y -= bt;
24
25       }
26
27       return {
28
29         x : x;
30
31         y : y;
32
33       }
34
35 }