要实现鼠标拖拽移动子窗体的功能,你可以使用JavaScript结合HTML和CSS。以下是一个简单的实现示例,它展示了如何使一个可拖动的div元素(作为子窗体)。
HTML部分(index.html):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Draggable Div</title>
<style>
#draggable {
width: 200px;
height: 100px;
position: absolute;
background-color: #f0f0f0;
border: 1px solid #ddd;
text-align: center;
line-height: 100px;
cursor: move;
}
</style>
</head>
<body>
<div id="draggable">拖拽我</div>
<script src="draggable.js"></script>
</body>
</html>
JavaScript部分(draggable.js):
document.addEventListener('DOMContentLoaded', function() {
const draggable = document.getElementById('draggable');
let active = false;
let currentX;
let currentY;
let initialX;
let initialY;
let xOffset = 0;
let yOffset = 0;
draggable.addEventListener('mousedown', dragStart, false);
function dragStart(e) {
initialX = e.clientX - xOffset;
initialY = e.clientY - yOffset;
if (e.target === draggable) {
active = true;
}
}
document.addEventListener('mousemove', drag, false);
function drag(e) {
if (active) {
e.preventDefault();
xOffset = e.clientX - initialX;
yOffset = e.clientY - initialY;
setTranslate(xOffset, yOffset, draggable);
}
}
document.addEventListener('mouseup', dragStop, false);
function dragStop() {
initialX = currentX;
initialY = currentY;
active = false;
}
function setTranslate(xPos, yPos, el) {
el.style.transform = `translate3d(${xPos}px, ${yPos}px, 0)`;
}
});
在这个示例中,我们创建了一个可拖动的`div`元素,并给它设置了一个`mousedown`事件监听器来开始拖动操作。当鼠标移动时,我们计算鼠标的当前位置与初始点击位置之间的偏移量,并使用CSS的`transform: translate3d()`属性来更新`div`的位置。当鼠标释放时,拖动操作停止。
请注意,这个示例使用了`transform: translate3d()`而不是直接修改`left`和`top`属性,因为`transform`可以提供更好的性能,特别是在处理复杂的动画和布局时。