JavaScript 拖動調整元素尺寸
分享一段程式碼例項,它利用js實現了拖動調整矩形大小的功能。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> #ant { width: 200px; height: 200px; background-color: #71e4ff; position: absolute; left: 200px; top: 200px; } .t { width: 100%; height: 20px; background-color: #ffa2d3; position: absolute; left: 0; top: 0; } .r { width: 20px; height: 100%; background-color: #ffa2d3; position: absolute; right: 0; top: 0; } .b { width: 100%; height: 20px; background-color: #ffa2d3; position: absolute; left: 0; bottom: 0; } .l { width: 20px; height: 100%; background-color: #ffa2d3; position: absolute; left: 0; top: 0; } .lt { width: 20px; height: 20px; background-color: #93ff6b; position: absolute; left: 0; top: 0; } .lb { width: 20px; height: 20px; background-color: #93ff6b; position: absolute; left: 0; bottom: 0; } .rt { width: 20px; height: 20px; background-color: #93ff6b; position: absolute; right: 0; top: 0; } .rb { width: 20px; height: 20px; background-color: #93ff6b; position: absolute; right: 0; bottom: 0; } </style> <script> window.onload = function() { var oBox = document.getElementById("ant"); var aDiv = oBox.getElementsByTagName("div"); for (var i = 0; i < aDiv.length; i++) { drag(aDiv[i]); } function drag(obj) { obj.onmousedown = function(ev) { var oEvent = ev || event; oPreW = oBox.offsetWidth; oPreH = oBox.offsetHeight; oPreL = oBox.offsetLeft; oPreT = oBox.offsetTop; oPreX = oEvent.clientX; oPreY = oEvent.clientY; document.onmousemove = function(ev) { var oEvent = ev || event; if (obj.className.indexOf("t") != -1) { var oChaY = oPreY - oEvent.clientY; oBox.style.height = oPreH + oChaY + "px"; oBox.style.top = oPreT - oChaY + "px"; } if (obj.className.indexOf("r") != -1) { var oChaX = oEvent.clientX - oPreX; oBox.style.width = oPreW + oChaX + "px"; } if (obj.className.indexOf("b") != -1) { var oChaY = oEvent.clientY - oPreY; oBox.style.height = oPreH + oChaY + "px"; } if (obj.className.indexOf("l") != -1) { var oChaX = oPreX - oEvent.clientX; oBox.style.width = oPreW + oChaX + "px"; oBox.style.left = oPreL - oChaX + "px"; } }; document.onmouseup = function() { document.onmousemove = null; document.onmouseup = null; }; return false; }; } }; </script> </head> <body> <div id="ant"> <div class="t"></div> <div class="r"></div> <div class="b"></div> <div class="l"></div> <div class="lt"></div> <div class="lb"></div> <div class="rt"></div> <div class="rb"></div> </div> </body> </html>
上面的程式碼實現預期效果,下面介紹一下它的實現過程。
一.程式碼註釋:
[CSS] 純文字檢視 複製程式碼#ant { width: 200px; height: 200px; background-color: #71e4ff; position: absolute; left: 200px; top: 200px; }
要被通過拖動調整尺寸的div元素。
採用絕對定位,所以如果它的子元素採用定位,那麼位移參考物件就是它。
[CSS] 純文字檢視 複製程式碼.t { width: 100%; height: 20px; background-color: #ffa2d3; position: absolute; left: 0; top: 0; }
為了便於記憶,t是top的縮寫,也就是頂部粉色部分。
採用絕對定位,定位參考物件是它的父元素。
[CSS] 純文字檢視 複製程式碼.lt { width: 20px; height: 20px; background-color: #93ff6b; position: absolute; left: 0; top: 0; }
為了便於記憶,lt是leftButton縮寫。
[JavaScript] 純文字檢視 複製程式碼window.onload = function() { // code }
當文件內容完全載入完畢之後,再去執行函式中的程式碼。
var oBox = document.getElementById("ant"),獲取指定id屬性值的元素物件。
var aDiv = oBox.getElementsByTagName("div"),獲取div元素集合。
[JavaScript] 純文字檢視 複製程式碼for (var i = 0; i < aDiv.length; i++) { drag(aDiv[i]); }
遍歷div元素集合中的每一個元素,並將其作為引數傳遞給函式drag。
[JavaScript] 純文字檢視 複製程式碼obj.onmousedown = function(ev) { //code }
為div元素註冊mousedown事件處理函式。
var oEvent = ev || event,獲取事件物件,這裡採用相容低版本IE瀏覽器的寫法。
[JavaScript] 純文字檢視 複製程式碼oPreW = oBox.offsetWidth; oPreH = oBox.offsetHeight;
獲取要被拖動元素的寬度和高度。
[JavaScript] 純文字檢視 複製程式碼oPreL = oBox.offsetLeft; oPreT = oBox.offsetTop;
獲取要被拖動元素距離body左邊緣和上邊緣的尺寸。
[JavaScript] 純文字檢視 複製程式碼oPreX = oEvent.clientX; oPreY = oEvent.clientY;
獲取當滑鼠按下時,滑鼠指標在瀏覽器客戶區的座標。
[JavaScript] 純文字檢視 複製程式碼document.onmousemove = function(ev) { // code }
為document註冊mousemove事件處理函式。
之所以註冊到document元素,而不是按鈕div上,是利用事件冒泡,防止滑鼠滑出按鈕div,導致失效。
var oEvent = ev || event,獲取事件物件,這裡採用相容低版本IE瀏覽器的寫法。
if (obj.className.indexOf("t") != -1),判斷滑鼠下時,指標所在的元素是否是按鈕div。
var oChaY = oPreY - oEvent.clientY,獲取拖動原來滑鼠座標與拖動時滑鼠座標的差,也就是拖動的距離。
oBox.style.height = oPreH + oChaY + "px",獲取拖動後的高度。
oBox.style.top = oPreT - oChaY + "px",拖動後高度發生變化,所以調整top值,保持位置固定。
[JavaScript] 純文字檢視 複製程式碼document.onmouseup = function() { document.onmousemove = null; document.onmouseup = null; }
當滑鼠鬆開後,解綁事件處理函式。
二.相關閱讀:
(1).document.getElementById()參閱document.getElementById()一章節。
(2).getElementsByTagName()參閱JavaScript getElementsByTagName()一章節。
(3).mousedown事件參閱JavaScript mousedown 事件一章節。
(4).offsetWidth參閱JavaScript offsetWidth一章節
(5).offsetHeight參閱JavaScript offsetHeight一章節。
(6).offsetLeft參閱JavaScript offsetLeft一章節。
(7).offsetTop參閱JavaScript offsetTop一章節。
(8).clientX參閱JavaScript event.clientX一章節。
(9).clientY參閱JavaScript event.clientY一章節。
(10).mousemove參閱JavaScript mousemove 事件一章節。
(11).className參閱JavaScript className 屬性一章節。
(12).indexOf參閱JavaScript string indexOf()一章節。
(13).mouseup參閱JavaScript mouseup 事件一章節。
相關文章
- JavaScript拖動調整元素的尺寸JavaScript
- js拖動調整元素寬度JS
- JavaScript滑鼠拖動調整div大小JavaScript
- jQuery拖動調整左右兩列寬度jQuery
- HTML元素拖動JSHTMLJS
- kindeditor 上傳圖片 自動調整尺寸大小
- 批量調整視訊尺寸大小的方法,一鍵自動批量調整視訊
- JavaScript與CSS3動畫方式改變元素尺寸JavaScriptCSSS3動畫
- Python 調整PDF頁面尺寸大小Python
- Winform中實現拖動 Windows 邊緣來調整其大小ORMWindows
- jQuery調整li元素順序jQuery
- .NET 調整圖片尺寸(Resize)各種方法
- JavaScript 限定範圍拖動效果JavaScript
- 有新手批量調整視訊尺寸的方法嗎?
- jQuery動態設定div元素的尺寸jQuery
- div拖動範圍限定在指定元素內
- JavaScript表格tr行左右拖動效果JavaScript
- JavaScript拖動滑鼠繪製矩形方框JavaScript
- JavaScript獲取瀏覽器、元素、螢幕的寬高尺寸JavaScript瀏覽器
- CSS實現可拉伸調整尺寸的分欄佈局CSS
- 調整陣列元素順序演算法陣列演算法
- JavaScript元素抖動效果JavaScript
- 關於快速排序中元素調整方法的分析排序
- JavaScript動態新增li元素JavaScript
- flutter好用的輪子推薦十-flutter拖動排序元素Flutter排序
- CSS3動畫方式改變div元素的尺寸CSSS3動畫
- 從零開始,開發一個 Web Office 套件(16):拖動控制點,調整編輯器大小Web套件
- JavaScript元素上下彈性運動JavaScript
- JavaScript設定元素float浮動JavaScript
- JavaScript DOM位置尺寸APIJavaScriptAPI
- javascript對點選事件和拖動事件的區分JavaScript事件
- react專案中實現元素的拖動和縮放例項React
- JavaScript 動態新增與刪除元素JavaScript
- 使用什麼工具可以快速將多張商品主圖的尺寸進行調整
- 谷歌最佳化Chrome全域性媒體控制元件 調整專輯封面尺寸谷歌Chrome控制元件
- JS 第三方工具封裝經典案例(canvas元素拖動)JS封裝Canvas
- 元素的尺寸 offsetWidth和clientWidth的區別client
- JavaScript動態新增或者刪除HTML元素JavaScriptHTML