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

首頁 > 編程 > JavaScript > 正文

Javascript 拖拽雛形中的一些問題(逐行分析代碼,讓你輕松了拖拽的原理)

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

今天我們就來解決上一次拖拽雛形中的一些問題。下面看看有哪些問題?

附上上期的Javascript代碼,方便大家查看問題。

<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;     oDiv.onmousemove = function(ev) {      var oEvent = ev || event;      oDiv.style.left = oEvent.clientX - disX+'px';       oDiv.style.top = oEvent.clientY - disY+'px';     };     oDiv.onmouseup = function() {      oDiv.onmousemove = null;      oDiv.onmouseup = null;     };    };   };  </script>

1. 現在的這個拖拽如果我鼠標移動的快點,你會發現這個鼠標從這個div出來了,這個時候div不會跟著鼠標走了。

那為什么會出現這個問題呢?

原因其實很簡單,mousemove的事件我們是給div加的,所以鼠標一旦脫離了這個div,那么這個時候mousemove已經不觸發了。

解決方案: 事件加載document 上,因為你鼠標無論如何都還在頁面里面,怎么樣都會觸發mousemove 這樣移動的在快也沒問題。

那么我們相應的修改下代碼。

<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;    // 事件加載document 上     document.onmousemove = function(ev) {      var oEvent = ev || event;      oDiv.style.left = oEvent.clientX - disX+'px';      oDiv.style.top = oEvent.clientY - disY+'px';     };     oDiv.onmouseup = function() {      document.onmousemove = null;      oDiv.onmouseup = null;      };    };   };  </script>

那么這個問題就可以解決了。

2. 我們看看現在還有什么問題,雖然拖的快的問題解決了,但是當我把鼠標移動到這個位置

現在可以明顯看到鼠標不在div上,如果這個時候抬起鼠標,你可以看到回來之后它還會動。 這就又是一個bug!

其實這個問題和上面的是一樣的。所以呢解決起來也很簡單我們把mouseup也加到document上,我們來試一下看看

document.onmouseup = function() {       document.onmousemove = null;       document.onmouseup = null;      };

這樣 現在如果在移動到剛才的那個位置,就不會在出現之前的bug了,并且移動的快也沒有任何的問題。一切都很正常。

3. 我們看看瀏覽器兼容的問題

其實在低版本的火狐瀏覽器中有這樣一個問題
。怎么出現的呢,當你第一次拖的時候是對的,在拖一次的時候按住在移動,你會發現會有個這個影子在后面。這個是怎么回事呢?

實際上來說我們現在拖動的是一個空的div火狐是有bug的,那么如果在div中加點內容呢

你會發現現在又沒有問題了。

所以火狐的bug就只有在空div中出現的。

解決方案:

其實很簡單,我們就只要阻止瀏覽器默認事件就可以了 return false; 在onmousedown中。 為什么要加在onmousedown中呢?

大家可以想一下,拖拽是從哪個事件開始的,是從onmousedown開始的吧,當鼠標按下的時候拖拽就開始了。所以要加載onmousedown中。

實際上就是加了一句return false; 把火狐的bug屏蔽掉了。

這樣不管怎么拖就沒有問題了。

附上代碼:

<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;     // 事件加載document 上     document.onmousemove = function(ev) {      var oEvent = ev || event;      oDiv.style.left = oEvent.clientX - disX+'px';      oDiv.style.top = oEvent.clientY - disY+'px';     };     document.onmouseup = function() {      document.onmousemove = null;      document.onmouseup = null;     };     return false;    };   };  </script>

現在程序是完整了,但是在用戶體驗上還有一些問題。

比如說用戶可能會把這個div拖出瀏覽器外面,那怎么解決呢?

那我們就在加個判斷唄。 這個很簡單吧,如果從左邊出去了

,那就直接等于0,他就從左邊出不去了。那么上邊也是一樣的。

那么怎么防止不能從右邊出去?? 畫個圖就清楚了。 其實我們只要把頁面的可視取的寬度減掉div的寬度就能算出來了。

那這個就是所謂的最大值,判斷一下如果移動的距離超過了這個最大值就等于這個最大值即可。那么下邊是一樣的。

附上完整代碼:

<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;          document.onmousemove = function(ev) {            var oEvent = ev || event;            // 存儲div當前的位置            var oDivLeft = oEvent.clientX - disX;            var oDivTop = oEvent.clientY - disY;            // 從左邊拖出去了            if (oDivLeft < 0) {              oDivLeft = 0;            } else if (oDivLeft > document.documentElement.clientWidth - oDiv.offsetWidth) {              oDivLeft = document.documentElement.clientWidth - oDiv.offsetWidth;            }            if (oDivTop < 0) {              oDivTop = 0;            } else if (oDivTop > document.documentElement.clientHeight - oDiv.offsetHeight) {              oDivTop = document.documentElement.clientHeight - oDiv.offsetHeight;            }            oDiv.style.left = oDivLeft + 'px';            oDiv.style.top = oDivTop + 'px';          };          document.onmouseup = function() {            document.onmousemove = null;            document.onmouseup = null;          };          return false; // 阻止默認事件,解決火狐的bug        };      };    </script>

那么現在這個拖拽就比較完整啦。O(∩_∩)O

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲乱码国产乱码精品精| 久久人人看视频| 日韩av电影免费观看高清| 亚洲国产精品字幕| 久久亚洲精品成人| 亚洲国产精品女人久久久| 亚洲第一天堂无码专区| 亚洲国内高清视频| 亚洲一区二区三区sesese| 国产成人精品一区二区在线| 亚洲电影免费观看| 国内精品视频在线| 美日韩精品免费视频| 国外成人性视频| 国产精品白嫩初高中害羞小美女| 国产精品影片在线观看| 精品免费在线观看| 亚洲综合最新在线| 久久国产精品99国产精| www.日韩.com| 欧美精品在线网站| www亚洲精品| 亚洲国产欧美自拍| 国产精品九九久久久久久久| 亚洲第一福利网| 日韩欧美亚洲一二三区| 狠狠干狠狠久久| 亚洲视频自拍偷拍| 韩国精品美女www爽爽爽视频| 亚洲国产日韩欧美在线99| 久久99精品视频一区97| 91美女片黄在线观| 欧美成人免费va影院高清| 国产精品www| 91免费看视频.| 亚洲欧美制服另类日韩| 国产精品女人网站| 日韩在线欧美在线| 在线观看91久久久久久| 亚洲精品不卡在线| 精品国产一区二区三区久久狼黑人| 国产精品国产三级国产专播精品人| 国产在线视频不卡| 国产精品美女网站| 欧美另类极品videosbest最新版本| 国产精品一区二区久久国产| 国产精品久久久久久久av大片| 亚洲日本成人女熟在线观看| 欧美高清视频在线播放| 国产精品极品美女粉嫩高清在线| 日韩美女av在线| 成人在线免费观看视视频| 韩国福利视频一区| 最近免费中文字幕视频2019| 成年无码av片在线| 搡老女人一区二区三区视频tv| 日韩精品视频免费在线观看| 国产最新精品视频| 2021久久精品国产99国产精品| xxx成人少妇69| 91色视频在线观看| 18一19gay欧美视频网站| 国产精品ⅴa在线观看h| 亚洲成人网在线观看| 国产精品三级网站| 国产精品久久久久77777| 亚洲乱码国产乱码精品精天堂| 亚洲色图18p| 国产成人精品优优av| 日韩欧美国产中文字幕| 国产精品久久久久久av福利软件| 久久精品视频中文字幕| 欧美国产一区二区三区| 国产精品久久久久久亚洲影视| 成人福利视频在线观看| 欧美成年人视频网站欧美| 亚洲偷欧美偷国内偷| 久久精品小视频| 国产精品久久久久久久久影视| 国产精品免费电影| 国产精品久久久久久久久久久久久| 在线精品视频视频中文字幕| 国产精品久久久久久久久久ktv| 国产精品入口福利| 欧美尤物巨大精品爽| 国产综合色香蕉精品| 日韩精品在线私人| www.日本久久久久com.| 日韩视频在线一区| 精品久久国产精品| 国产精品久久久久久久久久久久久久| 欧美精品久久一区二区| 97婷婷大伊香蕉精品视频| 欧美在线免费观看| 色悠悠国产精品| 欧美高清不卡在线| 亚洲国产成人久久综合| 国内精品久久久久久久久| 在线播放日韩av| 亚洲精品国产综合久久| 精品在线观看国产| 欧美黄色免费网站| 高潮白浆女日韩av免费看| 国产精品亚洲片夜色在线| 欧美大秀在线观看| 另类少妇人与禽zozz0性伦| 亚洲国语精品自产拍在线观看| 91精品国产自产在线| 中文字幕日本欧美| 亚洲美女久久久| 欧美日韩另类在线| 亚洲国产精品久久久| 一区二区三区亚洲| 福利视频第一区| 亚洲黄色www| 亚洲欧美制服第一页| 国产精品毛片a∨一区二区三区|国| 日韩欧美在线视频| 日韩精品极品在线观看| 亚洲人成网在线播放| 色综合色综合网色综合| 日韩精品免费在线| 黑丝美女久久久| 亚洲欧美日韩第一区| 久久69精品久久久久久久电影好| 欧美裸体男粗大视频在线观看| 影音先锋欧美精品| 久久伊人精品视频| 亚洲欧美国产一本综合首页| 日韩精品极品视频免费观看| 57pao国产精品一区| 日本成人免费在线| 美女啪啪无遮挡免费久久网站| 国产在线拍揄自揄视频不卡99| 亚洲欧美日韩精品| 欧美另类老肥妇| 欧美一级高清免费| 久久精品国产久精国产思思| 国产一区二区三区视频| 久久精品国产91精品亚洲| 中文精品99久久国产香蕉| 欧美另类第一页| 激情懂色av一区av二区av| 国产精品美女网站| 亚洲国产欧美一区二区丝袜黑人| 国产精品久久久久aaaa九色| 中文一区二区视频| 亚洲综合在线小说| 欧美精品久久一区二区| 国产91精品视频在线观看| 中文字幕成人精品久久不卡| 国产精品视频免费在线观看| 久久久久久伊人| 欧美日韩中文字幕日韩欧美| 国产精品美女免费视频| 一本色道久久综合亚洲精品小说| 欧美成人精品三级在线观看| 亚洲第一av在线| 2024亚洲男人天堂| 国产91ⅴ在线精品免费观看| 亚洲亚裔videos黑人hd| 亚洲成人精品在线| 亚洲精品久久久久中文字幕二区| 亚洲成人网久久久|