JavaScript 拖拽限定範圍
所謂拖拽就是通過滑鼠或者觸屏拖動元素改變原有位置。
在HTML5之前同樣可以實現拖拽效果,主要通過如下幾個事件實現:
(1).mousedown事件。
(2).mousemove事件。
(3).mouseup事件。
下面是一段簡單的拖拽效果程式碼例項,並對其進行詳細分析。
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> * { margin: 0; padding: 0; } #box { position: absolute; left: 0; top: 0; width: 100px; height: 100px; background: #f60; } </style> <script type="text/javascript"> window.onload = function () { var oBox = document.getElementById('box'); oBox.onmousedown = function (e) { var oEvent = e || window.event, disL = oEvent.clientX - oBox.offsetLeft, disT = oEvent.clientY - oBox.offsetTop, maxL = document.documentElement.clientWidth - oBox.offsetWidth, maxT = document.documentElement.clientHeight - oBox.offsetHeight; document.onmousemove = function (e) { var oEvent = e || window.event, disX = oEvent.clientX - disL, disY = oEvent.clientY - disT; //console.log(disX); if (disX <= 0) { disX = 0 } if (disY <= 0) { disY = 0 } if (disX >= maxL) { disX = maxL } if (disY >= maxT) { disY = maxT } oBox.style.left = disX + 'px'; oBox.style.top = disY + 'px'; } } document.onmouseup = function () { document.onmousemove = null; } } </script> </head> <body> <div id="box"></div> </body> </html>
上面的程式碼實現了我們的要求,下面就介紹一下它的實現過程。
一.程式碼註釋:
(1).window.onload = function () {},當文件內容完全載入完畢再去執行函式中的程式碼。
(2).var oBox = document.getElementById('box'),獲取id屬性值為box的元素物件。
(3).oBox.onmousedown = function (e) {},為元素註冊onmousedown註冊事件處理函式。
(4).var oEvent = e || window.event,實現事件物件的相容效果。
(5).disL = oEvent.clientX - oBox.offsetLeft,滑鼠在客戶區的座標減去OBox距離body左側的距離,其實也就是獲取滑鼠距離OBox元素左側的距離。(6).maxL = document.documentElement.clientWidth - oBox.offsetWidth,獲取OBox元素的最大left值。
(7).document.onmousemove = function (e) {},註冊onmousemove事件處理函式,之所以註冊document上,是利用了事件冒泡效果,同時也防止了滑鼠移出OBox元素,導致拖動失效現象。
(8).disX = oEvent.clientX - disL,獲取OBox元素的left值。
(9).disY = oEvent.clientY - disT,獲取OBox元素的top值。
(10).if (disX <= 0) { disX = 0 }
if (disY <= 0) { disY = 0 }
if (disX >= maxL) { disX = maxL }
if (disY >= maxT) { disY = maxT }
上面的程式碼實現了拖動範圍限定效果。
(11).document.onmouseup = function () {
document.onmousemove = null;
},當鬆開滑鼠按鍵的時候,解綁onmousemove事件處理函式。
二.相關閱讀:
(1).var oEvent = e || window.event參閱var ev=window.event||ev 一章節。
(2).clientX參閱JavaScript event.clientX一章節。
(3).offsetLeft參閱JavaScript offsetleft一章節。
(4).offsetWidth參閱JavaScript offsetWidth一章節。
(5).onmousemove事件參閱JavaScript mousemove事件一章節。
相關文章
- JavaScript 限定範圍的拖拽效果JavaScript
- JavaScript 限定範圍拖動效果JavaScript
- Elasticsearch聚合學習之三:範圍限定Elasticsearch
- div拖動範圍限定在指定元素內
- jQuery Validate限定輸入數字大小的範圍jQuery
- 【警惕】強化關聯更新時where子句範圍限定意識
- 【EXPDP】使用expdp的QUERY引數限定備份資料的範圍
- JavaScript變數 沒有塊範圍JavaScript變數
- 可以限定拖動範圍的彈出視窗效果程式碼例項
- JavaScript基礎 —— DOM:遍歷 與 範圍JavaScript
- Javascript解析之this代表物件及作用範圍JavaScript物件
- Javascript中變數範圍和hoist現象JavaScript變數
- JavaScript拖拽效果JavaScript
- javascript如何設定嚴格模式的作用範圍JavaScript模式
- 公司公司程式碼業務範圍成本控制範圍概念
- 隨機範圍小數和隨機範圍整數隨機
- elementui 當表格有固定列,拖動條在固定列的範圍內時拖拽不動UI
- SciPy 應用範圍
- groovy之範圍特性
- oracle hint有效範圍Oracle
- 詳解javascript拖拽(二)拖拽的應用及示例JavaScript
- 動態範圍控制原理
- 資料型別範圍資料型別
- MySQL 缺失範圍問題MySql
- MongoDB的適用範圍MongoDB
- JavaFX教程-範圍表示式Java
- int/double資料範圍
- 保護範圍和物件物件
- 檢視分割槽範圍
- maven基礎:依賴範圍Maven
- Go IP 段範圍校驗Go
- PLM系統應用範圍
- IP地址分類及範圍
- MySQL欄位的取值範圍MySql
- Java包範圍可見性Java
- MySQL 間斷範圍問題MySql
- MySQL連續範圍問題MySql
- 各類IP地址的範圍