国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

原生js實現拖拽功能基本思路詳解

2019-11-19 14:00:17
字體:
來源:轉載
供稿:網友

如果要設置物體拖拽,那么必須使用三個事件,并且這三個事件的使用順序不能顛倒。

1.onmousedown:鼠標按下事件
2.onmousemove:鼠標移動事件
3.onmouseup:鼠標抬起事件

  拖拽的基本原理就是根據鼠標的移動來移動被拖拽的元素。鼠標的移動也就是x、y坐標的變化;元素的移動就是style.position的 top和left的改變。當然,并不是任何時候移動鼠標都要造成元素的移動,而應該判斷鼠標左鍵的狀態是否為按下狀態,是否是在可拖拽的元素上按下的。

基本思路如下:

拖拽狀態 = 0鼠標在元素上按下的時候{     拖拽狀態 = 1     記錄下鼠標的x和y坐標     記錄下元素的x和y坐標     }   鼠標在元素上移動的時候{     如果拖拽狀態是0就什么也不做。     如果拖拽狀態是1,那么     元素y = 現在鼠標y - 原來鼠標y + 原來元素y     元素x = 現在鼠標x - 原來鼠標x + 原來元素x     }     鼠標在任何時候放開的時候{     拖拽狀態 = 0   } 

部分實例代碼:

HTML部分

<div class="calculator" id="drag">**********</div> 

CSS部分

calculator {   position: absolute; /*設置絕對定位,脫離文檔流,便于拖拽*/   display: block;   width: 218px;   height: 280px;   cursor: move;  /*鼠標呈拖拽狀*/ } 

JS部分

window.onload = function() {   //拖拽功能(主要是觸發三個事件:onmousedown/onmousemove/onmouseup)   var drag = document.getElementById('drag');   //點擊某物體時,用drag對象即可,move和up是全局區域,也就是整個文檔通用,應該使用document對象而不是drag對象(否則,采用drag對象時物體只能往右方或下方移動)   drag.onmousedown = function(e) {     var e = e || window.event; //兼容ie瀏覽器     var diffX = e.clientX - drag.offsetLeft; //鼠標點擊物體那一刻相對于物體左側邊框的距離=點擊時的位置相對于瀏覽器最左邊的距離-物體左邊框相對于瀏覽器最左邊的距離     var diffY = e.clientY - drag.offsetTop;     /*低版本ie bug:物體被拖出瀏覽器可是窗口外部時,還會出現滾動條,       解決方法是采用ie瀏覽器獨有的2個方法setCapture()/releaseCapture(),這兩個方法,       可以讓鼠標滑動到瀏覽器外部也可以捕獲到事件,而我們的bug就是當鼠標移出瀏覽器的時候,       限制超過的功能就失效了。用這個方法,即可解決這個問題。注:這兩個方法用于onmousedown和onmouseup中*/       if(typeof drag.setCapture!='undefined'){         drag.setCapture();       }     document.onmousemove = function(e) {       var e = e || window.event; //兼容ie瀏覽器       var left=e.clientX-diffX;       var top=e.clientY-diffY;       //控制拖拽物體的范圍只能在瀏覽器視窗內,不允許出現滾動條       if(left<0){         left=0;       }else if(left >window.innerWidth-drag.offsetWidth){         left = window.innerWidth-drag.offsetWidth;       }       if(top<0){         top=0;       }else if(top >window.innerHeight-drag.offsetHeight){         top = window.innerHeight-drag.offsetHeight;       }       //移動時重新得到物體的距離,解決拖動時出現晃動的現象       drag.style.left = left+ 'px';       drag.style.top = top + 'px';     };     document.onmouseup = function(e) { //當鼠標彈起來的時候不再移動       this.onmousemove = null;       this.onmouseup = null; //預防鼠標彈起來后還會循環(即預防鼠標放上去的時候還會移動)       //修復低版本ie bug       if(typeof drag.releaseCapture!='undefined'){         drag.releaseCapture();       }     };   }; }; 

總結

以上所述是小編給大家介紹的原生js實現拖拽功能基本思路詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 静乐县| 沈阳市| 赫章县| 井研县| 罗江县| 西乌| 崇礼县| 新源县| 福鼎市| 宜君县| 翼城县| 建始县| 定日县| 合水县| 荃湾区| 西林县| 农安县| 化德县| 耒阳市| 云和县| 宁武县| 广州市| 长治县| 雅江县| 扶沟县| 安多县| 泰州市| 肇州县| 准格尔旗| 宜宾市| 静乐县| 吴桥县| 仙游县| 全椒县| 余江县| 山东| 胶南市| 海兴县| 靖宇县| 永城市| 桃江县|