js对话框鼠标拖曳效果,案例实现思路如下。根据效果图编写页面结构和样式。 为对话框的标题区域注册鼠标按下事件和鼠标释放事件。 在鼠标按下时注册鼠标移动事件,在鼠标释放时移除鼠标移动事件。 在鼠标按下时,用鼠标指针距离文档左侧和顶部的距离,分别减去div元素距离文档左侧和顶部的距离,得到鼠标指针在div元素内的X、Y坐标值。 在鼠标移动事件中更改div元素的left和top值,计算方式为:使用鼠标指针距离文档左侧和顶部的距离,分别减去鼠标指针在div元素内的X、Y坐标值。
时间: 2024-02-05 18:12:05 浏览: 30
代码实现如下:
HTML结构:
```html
<div class="dialog">
<div class="title">对话框</div>
<div class="content">这是对话框的内容</div>
</div>
```
CSS样式:
```css
.dialog {
position: absolute;
top: 50px;
left: 50px;
width: 300px;
height: 200px;
background-color: #fff;
border: 1px solid #ccc;
}
.title {
height: 30px;
line-height: 30px;
padding: 0 10px;
background-color: #eee;
cursor: move;
}
```
JavaScript代码:
```javascript
var dialog = document.querySelector('.dialog');
var title = dialog.querySelector('.title');
// 鼠标按下事件
title.addEventListener('mousedown', function(e) {
var mouseX = e.clientX; // 鼠标指针距离文档左侧的距离
var mouseY = e.clientY; // 鼠标指针距离文档顶部的距离
var dialogX = dialog.offsetLeft; // div元素距离文档左侧的距离
var dialogY = dialog.offsetTop; // div元素距离文档顶部的距离
var disX = mouseX - dialogX; // 鼠标指针在div元素内的X坐标值
var disY = mouseY - dialogY; // 鼠标指针在div元素内的Y坐标值
// 鼠标移动事件
document.addEventListener('mousemove', moveDialog);
// 鼠标释放事件
document.addEventListener('mouseup', function() {
document.removeEventListener('mousemove', moveDialog);
});
function moveDialog(e) {
var x = e.clientX - disX; // div元素的left值
var y = e.clientY - disY; // div元素的top值
// 判断边界,防止对话框移出浏览器窗口
var winWidth = window.innerWidth || document.documentElement.clientWidth;
var winHeight = window.innerHeight || document.documentElement.clientHeight;
if (x < 0) {
x = 0;
}
if (y < 0) {
y = 0;
}
if (x > winWidth - dialog.offsetWidth) {
x = winWidth - dialog.offsetWidth;
}
if (y > winHeight - dialog.offsetHeight) {
y = winHeight - dialog.offsetHeight;
}
// 修改div元素的位置
dialog.style.left = x + 'px';
dialog.style.top = y + 'px';
}
});
```
以上代码实现了对话框标题区域的鼠标拖曳效果。当鼠标按下时,会注册鼠标移动事件,在移动事件中计算鼠标指针在div元素内的坐标值,并且根据鼠标移动的距离修改div元素的left和top值,从而实现对话框的拖曳效果。同时还加入了边界判断,防止对话框移出浏览器窗口。