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
- js通過拖動調整元素位置程式碼例項JS
- JavaScript拖動div元素詳解JavaScript
- 通過拖動實現調整元素之間位置程式碼例項
- jQuery滑鼠拖動調整數字大小jQuery
- JavaScript 調整li元素上下順序JavaScript
- javascript div元素滑鼠拖動效果詳解JavaScript
- jQuery拖動調整左右兩列寬度jQuery
- JavaScript方向鍵調整div元素的位置JavaScript
- kindeditor 上傳圖片 自動調整尺寸大小
- javascript中獲取元素尺寸JavaScript
- js實現的通過拖動調整元素間的相對位置程式碼例項JS
- 批量調整視訊尺寸大小的方法,一鍵自動批量調整視訊
- HTML元素拖動JSHTMLJS
- Winform中實現拖動 Windows 邊緣來調整其大小ORMWindows
- Python 調整PDF頁面尺寸大小Python
- jQuery實現的拖動調整表格td單元格的大小jQuery
- jQuery調整li元素順序jQuery
- 有新手批量調整視訊尺寸的方法嗎?
- JavaScript調整option順序JavaScript
- jQuerydiv元素拖動效果程式碼例項jQuery
- JavaScript 限定範圍拖動效果JavaScript
- JavaScript與CSS3動畫方式改變元素尺寸JavaScriptCSSS3動畫
- javascript緩衝彈性方式設定元素的尺寸JavaScript
- JavaScript 動畫方式設定元素尺寸和透明度JavaScript動畫
- jQuery動態設定div元素的尺寸jQuery
- div拖動範圍限定在指定元素內
- 調整 JavaScript 抽象的迭代方案JavaScript抽象
- 調整JavaScript 抽象的迭代方案JavaScript抽象
- CSS實現可拉伸調整尺寸的分欄佈局CSS
- JavaScript表格tr行左右拖動效果JavaScript
- JavaScript拖動滑鼠繪製矩形方框JavaScript
- JavaScript有虛線框的拖動JavaScript
- JavaScript左右拖動滑動的按鈕效果JavaScript
- 調整陣列元素順序演算法陣列演算法
- 譯|調整JavaScript抽象的迭代方案JavaScript抽象