JavaScript拖動滑鼠繪製矩形方框
本章節分享一段程式碼例項,它實現了拖動滑鼠實現繪製方框效果。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> #rectBox{ background:#CCFFFF; border:2px solid #0099FF; filter:alpha(opacity=30); opacity:0.3; position:absolute; } </style> <script type="text/javascript"> function Rect(){ this.doc = document.documentElement; if(!this.doc) return; this.startX = ''; this.startY = ''; rectSelf = this; } Rect.prototype.down = function(e){ var e = e?e:window.event; rectSelf.startX = e.pageX?e.pageX:e.clientX + document.documentElement.scrollLeft || document.body.scrollLeft; rectSelf.startY = e.pageY?e.pageY:e.clientY + document.documentElement.scrollTop+document.body.scrollTop; rectSelf.showRect(true); } Rect.prototype.up = function(e){ rectSelf.rectBox.style.width = '0px'; rectSelf.rectBox.style.height = '0px'; rectSelf.showRect(false); } Rect.prototype.move = function(e){ if(rectSelf.rectBox){ var currentX = e.pageX?e.pageX:e.clientX + document.documentElement.scrollLeft; var currentY = e.pageY?e.pageY:e.clientY + document.documentElement.scrollTop; rectSelf.rectBox.style.width = Math.abs(currentX - rectSelf.startX) + 'px'; rectSelf.rectBox.style.height = Math.abs(currentY - rectSelf.startY) + 'px'; if(currentX - rectSelf.startX < 0){ rectSelf.rectBox.style.left = currentX + 'px'; } if(currentY - rectSelf.startY < 0){ rectSelf.rectBox.style.top = currentY + 'px'; } } } Rect.prototype.showRect = function(bool){ if(bool){ if(!this.rectBox){ this.rectBox = document.createElement("div"); this.rectBox.id = "rectBox"; document.body.appendChild(this.rectBox); } this.rectBox.style.display = "block"; this.rectBox.style.left = this.startX + 'px'; this.rectBox.style.top = this.startY + 'px'; this.addEventListener(this.doc , 'mousemove' , this.move); } else{ if(this.rectBox){ this.rectBox.style.display = "none"; } this.removeEventListener(this.doc , 'mousemove' , this.move); } } Rect.prototype.addEventListener = function(o,e,l){ if(o.addEventListener){ o.addEventListener(e,l,false); } else if (o.attachEvent) { o.attachEvent('on'+e,function() { l(window.event); }); } } Rect.prototype.removeEventListener = function(o,e,l){ if (o.removeEventListener) { o.removeEventListener(e,l,false); } else if (o.detachEvent) { o.detachEvent('on'+e,function() { l(window.event); }); } } window.onload = function(){ var oRect = new Rect(); oRect.addEventListener(oRect.doc , 'mousedown' , oRect.down); oRect.addEventListener(oRect.doc , 'mouseup' , oRect.up); } </script> </head> <body> <h1>拖動滑鼠測試效果</h1> </body> </html>
上面的程式碼實現了我們的要求,下面介紹一下它的實現過程。
一.程式碼註釋:
(1).function Rect(){},定義一個建構函式。
(2).this.doc = document.documentElement,將document.documentElement賦值給this.doc。
(3).if(!this.doc) return,如果不存在,那麼就直接跳出。
(4).this.startX = '',宣告一個變數,它用來儲存拖動開始的滑鼠橫向座標。
(5).this.startY = '',宣告一個變數,它用來儲存推動開始的滑鼠縱向座標。
(6).rectSelf = this,將this賦值給變數。
(7).Rect.prototype.down = function(e){},這個就是mousedown事件處理函式。
(8).var e = e?e:window.event,獲取相容所有瀏覽器的事件物件。
(9).rectSelf.startX = e.pageX?e.pageX:e.clientX + document.body.scrollLeft,獲取滑鼠指標在文件中的水平座標,這裡是採用了相容性的寫法,因為低版本IE瀏覽器並不支援e.pageX。
(10).rectSelf.startY = e.pageY?e.pageY:e.clientY + document.body.scrollTop,獲取滑鼠指標在文件中的垂直座標,原理同上。
(11).rectSelf.showRect(true),此方法用來開始對繪製做一些基本工作,引數是一個布林值,用來表示要進行繪製還是結束繪製。
(12).Rect.prototype.up = function(e){},mouseup事件處理函式。
(13).rectSelf.rectBox.style.width = '0px',設定矩形div的寬度為0。
(14).rectSelf.rectBox.style.height = '0px',設定矩形div的高度為0。
(15).rectSelf.showRect(false),取消繪製,也就是矩形元素消失。
(16).Rect.prototype.move = function(e){},mousemove時間處理函式。
(17).if(rectSelf.rectBox){},如果矩形div元素已經建立。
(18).var currentX = e.pageX?e.pageX:e.clientX + document.body.scrollLeft,獲取滑鼠當前在文件中的橫向座標。(19).var currentY = e.pageY?e.pageY:e.clientY + document.body.scrollTop,獲取滑鼠當前在文件中的縱向座標。
(20).rectSelf.rectBox.style.width = Math.abs(currentX - rectSelf.startX) + 'px',設定矩形的寬度,之所以用絕對值方法,是因為現在還不清楚currentX和rectSelf.startX的大小。
(21).rectSelf.rectBox.style.height = Math.abs(currentY - rectSelf.startY) + 'px',設定矩形的高度,和上面同樣道理。
(22).if(currentX - rectSelf.startX < 0){
rectSelf.rectBox.style.left = currentX + 'px';
},如果小於0,也就是向左拖動,就設定元素的left值為當前滑鼠的橫向座標。
(22).if(currentY - rectSelf.startY < 0){
rectSelf.rectBox.style.top = currentY + 'px';
},和上面是同樣的道理。
(23).Rect.prototype.showRect = function(bool){},此方法可以進行建立的準備工作,引數是一個布林值,如果為true表示將要建立,然後進行準備工作,否則就要取消已經建立的div矩形元素。
(24).if(bool){
if(!this.rectBox){
this.rectBox = document.createElement("div");
this.rectBox.id = "rectBox";
document.body.appendChild(this.rectBox);
}
this.rectBox.style.display = "block";
this.rectBox.style.left = this.startX + 'px';
this.rectBox.style.top = this.startY + 'px';
this.addEventListener(this.doc , 'mousemove' , this.move);
},建立div元素,並且附加到body中
然胡設定元素的left和top值,然後註冊mousemove事件處理函式。
二.相關閱讀:
(1).建構函式可以參閱javascript建構函式一章節。
(2).var e = e?e:window.event參閱var ev=window.event||ev的作用是什麼一章節。
(3).e.pageX參閱jQuery event.pageX一章節。
(4).e.clientX參閱javascript clientX一章節。
(5).Math.abs()參閱javascript Math.abs()一章節。
(6).document.createElement()參閱document.createElement()一章節。
(7).appendChild()參閱js appendChild()一章節。
(8).prototype參閱javascript prototype原型一章節。
(9).addEventListener()參閱javascript addEventListener()一章節。
(10).attachEvent()參閱javascript attachEvent()一章節。
(11).removeEventListener()參閱removeEventListener()方法和detachEvent()方法用法一章節。
相關文章
- SVG拖動繪製矩形程式碼例項SVG
- JavaScript滑鼠拖動調整div大小JavaScript
- canvas 繪製矩形Canvas
- canvas實現手動繪製矩形Canvas
- SVG <rect> 繪製矩形SVG
- canvas 繪製圓角矩形Canvas
- SVG 繪製圓角矩形SVG
- canvas繪製矩形框Canvas
- canvas 繪製矩形缺角Canvas
- canvas系列教程之繪製矩形Canvas
- CAD如何繪製固定面積的矩形
- CAD繪製帶角度的矩形陣列陣列
- Qt/C++地圖動態繪製折線多邊形矩形圓形標註點/可編輯拖動調整大小和位置QTC++地圖
- 微信小程式 canvas圓角矩形的繪製微信小程式Canvas
- iOS開發_繪製圓角矩形虛線環iOS
- 如何繪製完美的滑鼠軌跡
- win10滑鼠拖不動怎麼處理_win10滑鼠無法拖動檔案的解決方法Win10
- JavaScript 限定範圍拖動效果JavaScript
- JavaScript 拖動調整元素尺寸JavaScript
- canvas學習筆記-繪製矩形及路徑(一)Canvas筆記
- Python 在PDF中繪製線條、矩形、橢圓形Python
- 原來 Canvas 也能直接繪製圓角矩形了Canvas
- win10 pdf檔案滑鼠不能拖動怎麼修復_win10 pdf檔案滑鼠不能拖動如何處理Win10
- JavaScript表格tr行左右拖動效果JavaScript
- JavaScript拖動調整元素的尺寸JavaScript
- JavaScript WebGL 繪製一個面JavaScriptWeb
- js 根據滑鼠拖動(或手機長按)旋轉JS
- JavaScript WebGL 繪製一條直線JavaScriptWeb
- JavaScript滑鼠中鍵滾動事件JavaScript事件
- win10系統下滑鼠不能拖動的解決方法Win10
- Web Office 套件(8):狀態管理 & 拖動滑鼠選中文字Web套件
- 基於canvas繪製的一個跟隨滑鼠變幻的動態背景線條Canvas
- 滑鼠拖動圖片,禁止在新視窗中開啟圖片
- Win10系統中滑鼠移動有拖影如何關閉Win10
- javascript對點選事件和拖動事件的區分JavaScript事件
- win10系統下滑鼠不能拖動檔案的解決方法Win10
- Flutter 中如何繪製動畫Flutter動畫
- canvas繪製動畫的技巧Canvas動畫