js實(shí)現(xiàn)限定范圍拖拽的示例
限定范圍拖拽
目錄
- 代碼實(shí)例
- 與簡(jiǎn)易拖拽的差異
- 下載源碼鏈接
代碼實(shí)例
* {
padding: 0;
margin: 0;
}
#box1 {
width: 500px;
height: 500px;
background: #999;
position: relative;
left: 100px;
top: 100px;
}
#box {
width: 100px;
height: 100px;
background: #334;
position: absolute;
cursor: move;
}
<div id="box1">
<div id="box"></div>
</div>
(function () {
var dragging = false
var boxX, boxY, mouseX, mouseY, offsetX, offsetY
var box = document.getElementById('box')
var box1 = document.getElementById('box1')
// 鼠標(biāo)按下的動(dòng)作
box.onmousedown = down
// 鼠標(biāo)的移動(dòng)動(dòng)作
document.onmousemove = move
// 釋放鼠標(biāo)的動(dòng)作
document.onmouseup = up
// 鼠標(biāo)按下后的函數(shù),e為事件對(duì)象
function down(e) {
dragging = true
// 獲取元素所在的坐標(biāo)
boxX = box.offsetLeft
boxY = box.offsetTop
// 獲取鼠標(biāo)所在的坐標(biāo)
mouseX = parseInt(getMouseXY(e).x)
mouseY = parseInt(getMouseXY(e).y)
// 鼠標(biāo)相對(duì)元素左和上邊緣的坐標(biāo)
offsetX = mouseX - boxX
offsetY = mouseY - boxY
}
// 鼠標(biāo)移動(dòng)調(diào)用的函數(shù)
function move(e){
if (dragging) {
// 獲取移動(dòng)后的元素的坐標(biāo)
var x = getMouseXY(e).x - offsetX
var y = getMouseXY(e).y - offsetY
// 計(jì)算可移動(dòng)位置的大小, 保證元素不會(huì)超過(guò)可移動(dòng)范圍
// 此處就是父元素的寬度減去子元素寬度
var width = box1.clientWidth - box.offsetWidth
var height = box1.clientHeight - box.offsetHeight
// min方法保證不會(huì)超過(guò)右邊界,max保證不會(huì)超過(guò)左邊界
x = Math.min(Math.max(0, x), width)
y = Math.min(Math.max(0, y), height)
// 給元素及時(shí)定位
box.style.left = x + 'px'
box.style.top = y + 'px'
}
}
// 釋放鼠標(biāo)的函數(shù)
function up(e){
dragging = false
}
// 函數(shù)用于獲取鼠標(biāo)的位置
function getMouseXY(e){
var x = 0, y = 0
e = e || window.event
if (e.pageX) {
x = e.pageX
y = e.pageY
} else {
x = e.clientX + document.body.scrollLeft - document.body.clientLeft
y = e.clientY + document.body.scrollTop - document.body.clientTop
}
return {
x: x,
y: y
}
}
})()
與簡(jiǎn)易拖拽的差異
可移動(dòng)位置的改變
// 此處就是父元素的寬度減去子元素寬度 var width = box1.clientWidth - box.offsetWidth var height = box1.clientHeight - box.offsetHeight
下載源碼鏈接
以上就是js實(shí)現(xiàn)限定范圍拖拽的示例的詳細(xì)內(nèi)容,更多關(guān)于js實(shí)現(xiàn)限定范圍拖拽的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- JS實(shí)現(xiàn)簡(jiǎn)易的圖片拖拽排序?qū)嵗a
- 移動(dòng)端JS實(shí)現(xiàn)拖拽兩種方法解析
- js實(shí)現(xiàn)拖拽與碰撞檢測(cè)
- JS實(shí)現(xiàn)拖拽元素時(shí)與另一元素碰撞檢測(cè)
- JQuery Dialog(JS 模態(tài)窗口,可拖拽的DIV)
- Sortable.js拖拽排序使用方法解析
- js實(shí)現(xiàn)拖拽效果
- javascript實(shí)現(xiàn)移動(dòng)端上的觸屏拖拽功能
- JS實(shí)現(xiàn)漂亮的窗口拖拽效果(可改變大小、最大化、最小化、關(guān)閉)
- JS組件Bootstrap Table表格行拖拽效果實(shí)現(xiàn)代碼
- js實(shí)現(xiàn)簡(jiǎn)易拖拽的示例
相關(guān)文章
JavaScript原生編寫《飛機(jī)大戰(zhàn)坦克》游戲完整實(shí)例
飛機(jī)大戰(zhàn)坦克是一款小游戲,相信很多朋友都有玩過(guò),由于最近在深入學(xué)習(xí)Javascript,所以想著用利用Javascript來(lái)實(shí)現(xiàn)這個(gè)游戲,下面這篇文章主要介紹了如何利用JavaScript原生編寫《飛機(jī)大戰(zhàn)坦克》游戲,需要的朋友可以參考下2017-01-01
小程序與內(nèi)嵌webview的數(shù)據(jù)交互方案詳解
這篇文章主要介紹了小程序與內(nèi)嵌webview的數(shù)據(jù)交互方案,為實(shí)現(xiàn)H5頁(yè)面到小程序的無(wú)縫切換,技術(shù)方案包含使用webview交互,特別是低碼C端表單頁(yè)面的處理,需要的朋友可以參考下2024-09-09
js實(shí)現(xiàn)按座位號(hào)抽獎(jiǎng)
本文主要介紹了js實(shí)現(xiàn)按座位號(hào)抽獎(jiǎng)的示例代碼。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04
微信小程序獲取位置展示地圖并標(biāo)注信息的實(shí)例代碼
這篇文章主要介紹了微信小程序獲取位置展示地圖并標(biāo)注信息的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
輕松實(shí)現(xiàn)HTML和JS之間的轉(zhuǎn)化的代碼
輕松實(shí)現(xiàn)HTML和JS之間的轉(zhuǎn)化的代碼...2007-09-09
jsPDF生成pdf后在網(wǎng)頁(yè)展示實(shí)例
本文為大家介紹下jsPDF生成pdf后如何在網(wǎng)頁(yè)展示,下面有個(gè)不錯(cuò)示例,大家可以參考下2014-01-01

