マウスポインタ-標準の書き方
11489 ワード
通常、インタラクティブな効果を書くときには、マウスポインタがある座標位置をよく使います.ブラウザによって解析の仕方が異なり、計算上の差異が生じることがよくあります.標準的で互換性の良い書き方を以下に示します.
1.ページ内のポインタの座標位置
属性選択:pageX、pageY-DOM標準
ClientX、clientY-怪奇IE
document.documentElement-DOM規格
document.body-怪奇IE
関数:
2.エレメント内のポインタの座標位置
属性選択:offsetX、offsetY-(Safariは要素の外壁の左上隅を原点とし、他のブラウザは内壁の左上隅を原点とする;Mozillaはサポートしない)
LayerX、layerY-互換Mozillaは、要素に含まれるブロックを参照オブジェクトとし、要素自体の左上隅ではなくoffsetLeft、offsetTopを減算する必要があります.
関数:
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 }