鼠标拖拽

本文展示了如何使用HTML和JavaScript实现元素的拖拽功能,并通过改变元素的位置来达到定位的效果。具体包括了基本的div元素拖拽、拖拽吸附至容器边界以及拖拽时的边界限制等功能。
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style>
#div1 {
width: 200px;
height: 200px;
background: red;
position: absolute;
}
</style>
<script>
window.onload = function () {
var oDiv = document.getElementById('div1');
var disX = 0;
var disY = 0;
oDiv.onmousedown = function (ev) {
var oEvent = ev || event;
disX = oEvent.clientX - oDiv.offsetLeft;
disY = oEvent.clientY - oDiv.offsetTop;
document.onmousemove = function (ev) {
var oEvent = ev || event;
var l = oEvent.clientX - disX;
var t = oEvent.clientY - disY;
if (l < 0) {
l = 0;
}
else if (l > document.documentElement.clientWidth - oDiv.offsetWidth) {//可视区的宽度——div宽度
l = document.documentElement.clientWidth - oDiv.offsetWidth;
}
if (t < 0) {
t = 0;
}
else if (t > document.documentElement.clientHeight - oDiv.offsetHeight) {
t = document.documentElement.clientHeight - oDiv.offsetHeight;
}
oDiv.style.left = l + 'px';
oDiv.style.top = t + 'px';
};
document.onmouseup = function () {
document.onmousemove = null;
document.onmouseup = null;
};
return false;
};
};
</script>
</head>

<body>
<div id="div1"></div>
</body>
</html>

div拖拽带框:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style>
#div1 {
width: 100px;
height: 100px;
background: yellow;
position: absolute;
}

.box {
border: 1px dashed black;
position: absolute;
}
</style>
<script>
window.onload = function () {
var oDiv = document.getElementById('div1');

var disX = 0;
var disY = 0;

oDiv.onmousedown = function (ev) {
var oEvent = ev || event;

disX = oEvent.clientX - oDiv.offsetLeft;
disY = oEvent.clientY - oDiv.offsetTop;

var oBox = document.createElement('div');

oBox.className = 'box';
oBox.style.width = oDiv.offsetWidth - 2 + 'px';
oBox.style.height = oDiv.offsetHeight - 2 + 'px';

oBox.style.left = oDiv.offsetLeft + 'px';
oBox.style.top = oDiv.offsetTop + 'px';

document.body.appendChild(oBox);

document.onmousemove = function (ev) {
var oEvent = ev || event;
var l = oEvent.clientX - disX;
var t = oEvent.clientY - disY;

oBox.style.left = l + 'px';
oBox.style.top = t + 'px';
};

document.onmouseup = function () {
document.onmousemove = null;
document.onmouseup = null;

oDiv.style.left = oBox.offsetLeft + 'px';
oDiv.style.top = oBox.offsetTop + 'px';

document.body.removeChild(oBox);
};

return false; //chrome、ff、IE9
};
};
</script>
</head>

<body>
<div id="div1"></div>
</body>
</html>
div拖拽吸附:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style>
#div1 {
width: 100px;
height: 100px;
background: red;
position: absolute;
}

#div2 {
width: 700px;
height: 500px;
background: #CCC;
position: relative;
}
</style>
<script>
window.onload = function () {
var oDiv = document.getElementById('div1');
var oDiv2 = document.getElementById('div2');

var disX = 0;
var disY = 0;

oDiv.onmousedown = function (ev) {
var oEvent = ev || event;

disX = oEvent.clientX - oDiv.offsetLeft;
disY = oEvent.clientY - oDiv.offsetTop;

document.onmousemove = function (ev) {
var oEvent = ev || event;
var l = oEvent.clientX - disX;
var t = oEvent.clientY - disY;

if (l < 50) {
l = 0;
} else if (l > 550) {
l = 600;
}
else if (l > oDiv2.offsetWidth - oDiv.offsetWidth) {
l = oDiv2.offsetWidth - oDiv.offsetWidth;
}

if (t < 50) {
t = 0;
} else if (t > 350) {
t = 400;
}
else if (t > oDiv2.offsetHeight - oDiv.offsetHeight) {
t = oDiv2.offsetHeight - oDiv.offsetHeight;
}

oDiv.style.left = l + 'px';
oDiv.style.top = t + 'px';
};

document.onmouseup = function () {
document.onmousemove = null;
document.onmouseup = null;
};

return false;
};
};
</script>
</head>

<body>
<div id="div2">
<div id="div1"></div>
</div>
</body>
</html>
 

转载于:https://www.cnblogs.com/theWayToAce/p/5305406.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值