一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

各個瀏覽器中鼠標(biāo)位置的屬性 offsetX layerX PageX clientX (自由拖動框,防止文字選中)

 八塊腹肌的壞蛋 2016-10-29

參考:

http://blog.csdn.NET/crazy_fire/article/details/7721587

http://www./pagex-clientx-offsetx-layerx-of-those-things/


1.offsetX和layerX

offsetX:

IE特有(新版本瀏覽器 除了ff都支持),鼠標(biāo)相比較于觸發(fā)事件的元素的位置,以元素盒子模型的內(nèi)容區(qū)域的左上角為參考點(diǎn),如果有boder,可能出現(xiàn)負(fù)值。

layerX:

FF特有,鼠標(biāo)相比較于當(dāng)前坐標(biāo)系的位置,即如果觸發(fā)元素沒有設(shè)置絕對定位或相對定位,以頁面為參考點(diǎn),如果有,將改變參考坐標(biāo)系,從觸發(fā)元素盒子模型的border區(qū)域的左上角為參考點(diǎn),

也就是當(dāng)觸發(fā)元素設(shè)置了相對或者絕對定位后,layerX和offsetX就幸福地生活在一起^-^,幾乎相等,唯一不同就是一個從border為參考點(diǎn),一個以內(nèi)容為參考點(diǎn)


2.PageX和clientX

PageX和clientX ,這個兩個比較容易搞混,

PageX:鼠標(biāo)在頁面上的位置,從頁面左上角開始,即是以頁面為參考點(diǎn),不隨滑動條移動而變化

clientX:鼠標(biāo)在頁面上可視區(qū)域的位置,從瀏覽器可視區(qū)域左上角開始,即是以瀏覽器的可視窗口為參考點(diǎn),隨滑動條移動 而變化.


IE中沒有PageX,解決辦法:

PageY=clientY+scrollTop-clientTop;

頁面上的位置=可視區(qū)域位置+頁面滾動條切去高度-自身border高度


jQuery中的PageX代碼:

  1. <span style="font-family:Microsoft YaHei;">// Calculate pageX/Y if missing and clientX/Y available  
  2. if ( event.pageX == null && event.clientX !=  null ) {  
  3.     var doc = document.documentElement, body = document.body;  
  4.     event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft  || body && body.clientLeft || 0);  
  5.     event.pageY = event.clientY + (doc && doc.scrollTop  ||  body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);  
  6. }</span>  


網(wǎng)上別人總結(jié)的關(guān)于這六個糾結(jié)的糾結(jié)表..

  1. <span style="font-family:Microsoft YaHei">offsetX/offsetY:    W3C- IE+  Firefox-  Opera+  Safari+  chrome+  
  2. x/y:                W3C- IE+  Firefox-  Opera+  Safari+  chrome+  
  3. layerX/layerY:      W3C- IE-  Firefox+  Opera-  Safari+  chrome+  
  4. pageX/pageY:        W3C- IE-  Firefox+  Opera+  Safari+  chrome+  
  5. clientX/clientY:    W3C+ IE+  Firefox+  Opera+  Safari+  chrome+  
  6. screenX/screenY    :W3C+ IE+  Firefox+  Opera+  Safari+  chrome+</span>  

附:一個可以自由拖動的代碼 ( js實(shí)現(xiàn))

  1. <span style="font-family:Microsoft YaHei;"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www./1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <title>無標(biāo)題文檔</title>  
  6. <script type="text/javascript">  
  7.   function drag(o){  
  8.     if(!document.getElementById){return false};  
  9.     o=document.getElementById(o);  
  10.     if(!o){return false};  
  11.     o.style.position="absolute";  
  12.     o.onmousedown=function(e){  
  13.         e=e||window.event;  
  14.         var x=e.layerX||e.offsetX;  
  15.         var y=e.layerY||e.offsetY;  
  16.         document.onmousemove=function(e){  
  17.            e=e||window.event;  
  18.  //獲取所有瀏覽器的e.pageX   
  19.  if ( e.pageX == null && e.clientX !=  null ) {  
  20.     var doc = document.documentElement, body = document.body;  
  21.     e.pageX = e.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft  || body && body.clientLeft || 0);  
  22.     e.pageY = e.clientY + (doc && doc.scrollTop  ||  body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);  
  23. }            
  24.            o.style.left=(e.pageX-x)+"px";  //如果沒有滾動條,用e.clientX也是對的  
  25.            o.style.top=(e.pageY-y)+"px";};  
  26.            document.onmouseup=function(){  
  27.              document.onmousemove=null;  
  28.              o.onmousedown=null;     
  29.           }  
  30.        }  
  31.     }  
  32. </script>  
  33. </head>  
  34. <body>  
  35. <div id="cen">  
  36. <p class="control" style="margin-bottom:10px; cursor:move" title="拖拽" onmousedown="drag('cen')" >點(diǎn)俺拖拽</p>  
  37.   
  38. <p>1111111111111111111111</p>  
  39. <p>111111111111111</p>  
  40. <p>1111111111</p></div>  
  41.   
  42. <p style="height:900px;">測試</p>  
  43. </body>  
  44. </html>  
  45. </span>  


上面代碼有一個問題,在拖動目標(biāo)的時候,經(jīng)常有文字被選中,解決這個問題需要加入下面代碼片段:

  1. <span style="font-family:Microsoft YaHei;">try{  
  2.       if(document.selection){//IE ,Opera  
  3.           if(document.selection.empty)  
  4.                    document.selection.empty();//IE  
  5.           else{//Opera  
  6.                    document.selection = null;  
  7.           }  
  8.       }else if(window.getSelection){//FF,Safari  
  9.            window.getSelection().removeAllRanges();  
  10.       }  
  11. }catch(e){}</span>  






附張圖:(網(wǎng)上搜的)





    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    黑人巨大精品欧美一区二区区| 亚洲综合香蕉在线视频| 午夜视频成人在线免费| 国产一级一片内射视频在线| 精品al亚洲麻豆一区| 日韩精品一区二区三区四区| 国产又猛又黄又粗又爽无遮挡| 狠狠亚洲丁香综合久久| 懂色一区二区三区四区| 无套内射美女视频免费在线观看| 亚洲欧美日韩在线看片| 国产日韩欧美一区二区| 精品人妻一区二区三区免费看| 欧美日韩国产精品第五页| 国产精品免费视频久久| 国产老女人性生活视频| 国产av精品高清一区二区三区| 欧美日本道一区二区三区| 男人把女人操得嗷嗷叫| 91欧美日韩精品在线| 久久99青青精品免费观看| 欧美一区二区黑人在线| 殴美女美女大码性淫生活在线播放| 国产一区二区三区成人精品| 不卡中文字幕在线视频| 精品日韩欧美一区久久| 熟女白浆精品一区二区| 日韩欧美国产精品中文字幕| 色婷婷丁香激情五月天| 又黄又爽禁片视频在线观看| 欧美国产日本高清在线| 日本高清中文精品在线不卡| 麻豆91成人国产在线观看| 欧美欧美欧美欧美一区| 国产又大又黄又粗又免费| 麻豆视频传媒入口在线看| 成人精品视频在线观看不卡| 久热香蕉精品视频在线播放| 国产精品推荐在线一区| 国产av一区二区三区久久不卡| 91欧美激情在线视频|