js物件導向封裝拖動效果程式碼例項
分享一段程式碼例項,它實現了div元素的拖動效果。
並且採用物件導向的方式對程式碼進行了封裝,程式碼例項如下:
[HTML] 純文字檢視 複製程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> .box { width:100px; height:100px; background: red; position: absolute; top:0; left: 0; } </style> <script> function Drag(ele) { this.ele = ele; } Drag.prototype = { fndown: function(event) { var _this = this; this.disP = { x: event.clientX - this.ele.offsetLeft, y: event.clientY - this.ele.offsetTop }; document.onmousemove = function(ev) { ev = ev || window.event; _this.fnmove(ev); }; document.onmouseup = function() { _this.fnup(); } }, fnmove: function(event) { this.move = { x: event.clientX - this.disP.x, y: event.clientY - this.disP.y }; this.ele.style.left = this.move.x + 'px'; this.ele.style.top = this.move.y + 'px'; }, fnup: function() { document.onmousemove = null; document.onmouseup = null; }, init: function() { var self = this; self.ele.onmousedown = function(event) { event = event || window.event; self.fndown(event); return false; } } }; window.onload = function() { var box = document.querySelector('#box'), drag = new Drag(box); drag.init(); }; </script> </head> <body> <div id="box" class="box"></div> </body> </html>
上面的程式碼實現了拖動封裝,下面介紹一下它的實現過程。
一.程式碼註釋:
[JavaScript] 純文字檢視 複製程式碼function Drag(ele) { this.ele = ele; }
函式在js中可以用作類的角色,也就是可以用new呼叫。
ele引數是一個元素物件。
es6中新增類的概念,具體可以參閱ES2015 Class類一章節。
[JavaScript] 純文字檢視 複製程式碼Drag.prototype = { //code }
通過原型為類的物件例項新增屬性後者方法。
[JavaScript] 純文字檢視 複製程式碼fndown: function(event) { var _this = this; this.disP = { x: event.clientX - this.ele.offsetLeft, y: event.clientY - this.ele.offsetTop }; document.onmousemove = function(ev) { ev = ev || window.event; _this.fnmove(ev); }; document.onmouseup = function() { _this.fnup(); } }
此函式會在onmousedown事件觸發時候呼叫。
even引數是事件物件,會在onmousedown事件處理方法中為其傳遞。
var _this = this,this是指向當前方法被呼叫的物件,將其傳遞給_this,是為了防止衝突,因為在其內部的其他方法中,this就不一定再執行fndown的呼叫物件了。this.disP中儲存的是滑鼠按鍵按下時候,滑鼠指標所在位置距離div元素左邊緣和上邊緣的距離。
document.onmousemove = function(ev){}註冊onmousemove事件處理函式,也就是說只當滑鼠按下之後,才能有拖動效果,之所以註冊在document上,而不是直接註冊在div元素本身之上,是利用事件冒泡現象,防止滑鼠滑出div元素,導致拖動無效的現象。
document.onmouseup註冊onmouseup事件處理函式,也就是滑鼠按鍵鬆開時會觸發此事件。
[JavaScript] 純文字檢視 複製程式碼fnmove: function(event) { this.move = { x: event.clientX - this.disP.x, y: event.clientY - this.disP.y }; this.ele.style.left = this.move.x + 'px'; this.ele.style.top = this.move.y + 'px'; }
此方法會在onmousemove事件觸發的時候呼叫,能夠使元素隨著滑鼠指標的移動而移動,也就實現了拖動效果。
this.move儲存的是元素距離容器左側和上冊的距離;左後將其設定為left和top屬性值即可實現拖動。
[JavaScript] 純文字檢視 複製程式碼fnup: function() { document.onmousemove = null; document.onmouseup = null; }
解綁對應的事件處理函式。
[JavaScript] 純文字檢視 複製程式碼init: function() { var self = this; self.ele.onmousedown = function(event) { event = event || window.event; self.fndown(event); } }
此方法具有初始化功能。
相關閱讀:
(1).prototype屬性可以參閱javascript prototype原型一章節。
(2).this用法可以參閱javascript this一章節。
(3).clientX可以參閱javascript event.clientX一章節。
(4).offsetLeft可以參閱offsetleft一章節。
(6).onmousemove可以參閱javascript mousemove事件一章節。
(7).onmouseup可以參閱javascript mouseup事件一章節。
(8).document.querySelector()可以參閱document.querySelector()一章節。
相關文章
- js實現的div拖動效果例項程式碼JS
- jQuerydiv元素拖動效果程式碼例項jQuery
- js實現的dom元素拖動封裝外掛程式碼例項JS封裝
- 物件導向實現的tab選項卡效果程式碼例項物件
- 移動端div塊拖動效果程式碼例項
- javascript物件導向相關程式碼例項JavaScript物件
- 滑鼠按住拖動具有半透明效果的程式碼例項
- 可以拖動立方體3D效果程式碼例項3D
- 拖動滾動條實現div跟隨效果程式碼例項
- jquery div層拖動效果封裝jQuery封裝
- html5拖動上傳圖片效果程式碼例項HTML
- js元素上下移動效果程式碼例項JS
- js元素的震動效果程式碼例項JS
- js橫向滑動摺疊導航選單程式碼例項JS
- js通過拖動調整元素位置程式碼例項JS
- js左右滑動選項卡效果程式碼例項JS
- Javascript 物件導向程式設計(一):封裝JavaScript物件程式設計封裝
- 物件導向:封裝,多型物件封裝多型
- 物件導向之封裝(Java)物件封裝Java
- 對FMDB物件導向封裝物件封裝
- js物件導向封裝級聯下拉選單列表JS物件封裝
- [.net 物件導向程式設計基礎] (11) 物件導向三大特性——封裝物件程式設計封裝
- 可以限定拖動範圍的彈出視窗效果程式碼例項
- 通過拖動將商品新增到購物車效果程式碼例項
- SVG拖動繪製矩形程式碼例項SVG
- 可以拖動的div塊程式碼例項
- js重力球效果程式碼例項JS
- js煙花效果程式碼例項JS
- js鐘錶效果程式碼例項JS
- js秒錶效果程式碼例項JS
- JavaScript物件導向之一(封裝)JavaScript物件封裝
- 複習java物件導向(封裝)Java物件封裝
- 物件導向08:封裝詳解物件封裝
- 20. 物件導向之封裝物件封裝
- js實現的元素抖動效果程式碼例項JS
- js文字橫向無縫滾動程式碼例項JS
- Python物件導向多型實現原理及程式碼例項Python物件多型
- javascript字串操作程式碼封裝程式碼例項JavaScript字串封裝