亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Javascript 拖拽的一些高級的應用(逐行分析代碼,讓你輕松了拖拽的原理)

2019-11-20 13:19:45
字體:
來源:轉載
供稿:網友

我們看看之前的拖拽在周圍有東西的時候會出現什么問題? 在高級瀏覽器中不會有啥問題,我們放到IE7下面測試一下,問題就出來了。如圖

我們可以很清楚的看到,文字都已經被選中了。那這個用戶體驗很不好,用起來也不方便。順便提一下,我們之前加了一個return false;幫我們解決了很多問題,如果去掉這個的話,chrome也會出現一樣的問題。那么也就是說這個return false;可以解決chrome ff IE9+ 這些瀏覽器的問題。

實際上在我們開發中,頁面上會有許多的元素組成,不可能就一個div,在你拖動的時候其他地方是不會被選中的,比如說百度地圖,大家可以玩玩。
那我們如何做到這樣子的一個拖拽呢?能夠解決IE7的問題呢?

解決方案:

我們可以用一個小技巧來解決,這個技巧只有在IE6-8支持,實際上就能解決我們的問題,因為其他的瀏覽器用return false; 就夠了。下面看看是什么技巧

就是事件捕獲!! 簡單說明下 附上代碼

<title></title>    <script type="text/javascript">      window.onload=function(){        var oBtn=document.getElementById("btn");        oBtn.onclick=function(){          alert(1);        };        // 網頁上所有地方的上的事件都集中到一個按鈕身上 IE 專用        oBtn.setCapture(); // 點擊哪里都是彈a      }    </script>  </head>  <body>    <input type="button" id="btn" value="按鈕" />  </body>

實際上就是頁面上所有地方上的事件都集中到一點,點擊頁面任何位置都會彈出a,也就是setCapture()作用。

把所有事件都集中到一個按鈕來處理??! 這個就只有IE兼容??!

這樣,讓我來看看如何修改之前的代碼。。。。

我們首先把所有的document改回div,記不記得我們之前講過因為鼠標拖動的快點就容易拖出div,所以把事件都加在document上。

而現在就不必這樣做了,給我們之前的div加上一個setCapture()看看效果。

<body>    IE 7 中的文字會被選中 ,    <br />如果不加return false chrome ff 也會有這樣的問題 asdsadad    <br />    <div id="div1">      asdsadad asdsadad asdsadad    </div>    asdsadadasdsadadasdsadad  </body>
<style type="text/css">      #div1 {        width: 200px;        height: 200px;        background: red;        position: absolute;      }    </style>
<script type="text/javascript">     // 拖拽空div 低版本的火狐有bug   window.onload = function() {    var oDiv = document.getElementById("div1");    var disX = 0;    var disY = 0;    oDiv.onmousedown = function(ev) {     var oEvent = ev || event;     disX = oEvent.clientX - oDiv.offsetLeft;     disY = oEvent.clientY - oDiv.offsetTop;     oDiv.onmousemove = function(ev) {      var oEvent = ev || event;      var oDivLeft = oEvent.clientX - disX;      var oDivTop = oEvent.clientY - disY;      oDiv.style.left = oDivLeft + 'px';      oDiv.style.top = oDivTop + 'px';     };     oDiv.onmouseup = function() {      oDiv.onmousemove = null;      oDiv.onmouseup = null;     };     oDiv.setCapture();     return false; // 阻止默認事件,解決火狐的bug    };   };  </script>

這個時候實際上我們拖動在快也不會出現鼠標拖出Div的問題了。 實際上加了setCapture()以后,整個網頁上所有的事件都會聚集在這一個div上面。

其實現在,這個文字就不會被選中了。為什么呢? 因為現在網頁上的文字,圖片的所有事件都在div上了,他們已經得不到事件了!所以自然他們就不會被選中了。

當然現在又有個問題????你會發現當你要試圖去選中那些文字的時候,就選不中了。

如何是好,事件都集中在div上了。。。!!!!!

所以呢,其實這個setCapture()就像一把鎖,現在都鎖住了,事件都在div上面,現在解鎖就可以了 那相對應的就有 releaseCapture();

releaseCapture(); 就是釋放捕獲。 實際上在鼠標抬起的時候加上就可以了。

window.onload = function() {    var oDiv = document.getElementById("div1");    var disX = 0;    var disY = 0;    oDiv.onmousedown = function(ev) {     var oEvent = ev || event;     disX = oEvent.clientX - oDiv.offsetLeft;     disY = oEvent.clientY - oDiv.offsetTop;     oDiv.onmousemove = function(ev) {      var oEvent = ev || event;      var oDivLeft = oEvent.clientX - disX;      var oDivTop = oEvent.clientY - disY;      oDiv.style.left = oDivLeft + 'px';      oDiv.style.top = oDivTop + 'px';     };     oDiv.onmouseup = function() {      oDiv.onmousemove = null;      oDiv.onmouseup = null;      oDiv.releaseCapture();     };     oDiv.setCapture();     return false; // 阻止默認事件,解決火狐的bug    };   };

現在就能解決文字選中的問題了。 最后我們坐下兼容,實際上來說這個setCapture() 是不兼容的,放在其他瀏覽器就錯了。

那么很簡單, 我們只要合并這次與上一次的代碼就可以了,兼容嘛 做個if判斷就好。最后附上整理好的代碼

<script type="text/javascript">      window.onload = function() {        var oDiv = document.getElementById("div1");        var disX = 0;        var disY = 0;        oDiv.onmousedown = function(ev) {          var oEvent = ev || event;          disX = oEvent.clientX - oDiv.offsetLeft;          disY = oEvent.clientY - oDiv.offsetTop;          if (oDiv.setCapture) {            oDiv.onmousemove = mouseMove;            oDiv.onmouseup = mouseUp;            oDiv.setCapture(); // IE 7 下文字就不會被選中 其實就是文字或圖片得不到事件          } else {            document.onmousemove = mouseMove;            document.onmouseup = mouseUp;          }          function mouseMove(ev) {            var oEvent = ev || event;            var oDivLeft = oEvent.clientX - disX;            var oDivTop = oEvent.clientY - disY;            oDiv.style.left = oDivLeft + 'px';            oDiv.style.top = oDivTop + 'px';          }          function mouseUp(ev) {            this.onmousemove = null;            this.onmouseup = null;            if (oDiv.releaseCapture) {              oDiv.releaseCapture(); // 釋放捕獲            }          }          return false; // 阻止默認事件,解決火狐的bug        };      };    </script>

好了,都搞定了 O(∩_∩)O哈哈~

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国内揄拍国内精品少妇国语| 成人a在线观看| 成人精品在线视频| 国产日韩精品在线播放| 91成人国产在线观看| 国产精品久久在线观看| 久久久久久综合网天天| 欧美大学生性色视频| 欧美在线观看日本一区| 亚洲最新av网址| 日韩中文在线观看| 欧美激情国产高清| 91视频88av| 伊人激情综合网| 精品一区二区三区四区在线| 久久九九热免费视频| 久久精品国产91精品亚洲| 亚洲国产一区二区三区在线观看| 97色在线播放视频| 91精品国产高清自在线看超| 成人黄色短视频在线观看| 96pao国产成视频永久免费| 日韩在线观看成人| 久久久久久久久久国产精品| 91影视免费在线观看| 欧美日韩国产精品| 琪琪亚洲精品午夜在线| 国产成人精品综合久久久| 一区二区欧美亚洲| 日韩精品在线免费观看视频| 亚洲理论在线a中文字幕| 日韩精品极品在线观看| 亚洲精品国产美女| 在线精品视频视频中文字幕| 成人免费视频97| 岛国av一区二区在线在线观看| 日韩精品极品视频免费观看| 欧美理论片在线观看| 在线a欧美视频| 日韩一级裸体免费视频| x99av成人免费| 91精品国产自产91精品| 国产精品大陆在线观看| 欧美性猛xxx| 欧美精品videosex性欧美| 亚洲大尺度美女在线| …久久精品99久久香蕉国产| 欧美激情视频网| 亚洲日本欧美日韩高观看| 清纯唯美亚洲激情| 成年人精品视频| 欧美乱人伦中文字幕在线| 欧美日韩国产成人高清视频| 91久久中文字幕| 亚洲人成在线观看网站高清| 狠狠干狠狠久久| 2019国产精品自在线拍国产不卡| 亚洲自拍小视频| 久久欧美在线电影| 亚洲人成毛片在线播放| 国产精品日韩欧美综合| 91视频8mav| 亚洲精品少妇网址| 色多多国产成人永久免费网站| 欧美在线精品免播放器视频| 国产午夜精品视频| 欧美日韩成人在线观看| 国产精品视频久| 亚洲精品久久在线| 美日韩精品视频免费看| 超碰精品一区二区三区乱码| 亚洲全黄一级网站| 欧美激情一级精品国产| 久久久久国产视频| 日韩精品久久久久久福利| 91精品国产免费久久久久久| 91久久久久久久一区二区| 亚洲国产精品专区久久| 亚洲黄色有码视频| 欧美激情精品久久久久久变态| 国内外成人免费激情在线视频| 国产精品小说在线| 精品福利在线观看| 4444欧美成人kkkk| 成年人精品视频| 亚洲精品www久久久| 亚洲图片欧洲图片av| 欧美中文字幕视频| 精品国产乱码久久久久酒店| 久久精品国产久精国产思思| 92福利视频午夜1000合集在线观看| 97在线免费视频| 国产精品88a∨| 欧美精品免费播放| 亚洲第一av网站| 成人精品视频久久久久| 欧美精品一二区| 色琪琪综合男人的天堂aⅴ视频| 亚洲精品成人免费| 日本电影亚洲天堂| 91牛牛免费视频| 国产精品自拍小视频| 欧美精品在线极品| 日韩在线观看免费网站| 77777少妇光屁股久久一区| 国内精品久久久久久中文字幕| 欧美超级乱淫片喷水| 欧美华人在线视频| 一区二区三区日韩在线| 日韩精品极品在线观看| 久久久国产91| 国产精品91在线| 国产欧美va欧美va香蕉在线| 亚洲高清免费观看高清完整版| 黑人狂躁日本妞一区二区三区| 91网站免费观看| 欧洲成人性视频| 国内精品久久久久影院 日本资源| 日韩高清电影好看的电视剧电影| 亚洲成在人线av| 中文字幕精品—区二区| 98视频在线噜噜噜国产| www.精品av.com| 中文字幕日韩专区| 午夜精品久久久久久久男人的天堂| 亚洲第一页在线| 国产精品一区二区久久| 久久久国产91| 国产亚洲精品激情久久| 国产精品视频久| 日韩欧美国产网站| 最近中文字幕日韩精品| 成人中文字幕+乱码+中文字幕| 成人欧美一区二区三区黑人孕妇| 伦伦影院午夜日韩欧美限制| 国产精品久久久久久久久男| 日韩视频在线免费观看| 日韩小视频网址| 欧美日韩在线另类| 国产亚洲精品美女久久久| 日本一区二区在线免费播放| 91久久精品在线| 日韩在线中文视频| 国产精品久久久久久久久| 日韩欧美精品免费在线| 亚洲精品av在线| 国产免费成人av| 国产欧美日韩免费看aⅴ视频| 亚洲香蕉av在线一区二区三区| 97激碰免费视频| 亚洲а∨天堂久久精品9966| 国产精品国语对白| 亚洲欧美中文字幕| 国产精品欧美日韩久久| 国产精品日韩欧美| 亚洲高清久久久久久| 中文精品99久久国产香蕉| 欧美中文字幕在线观看| 亚洲一区二区三区香蕉| 欧美色欧美亚洲高清在线视频| 久久久久久久久电影| 久久免费视频观看| 日韩精品在线视频观看| 美女少妇精品视频|