今天因为项目需要,多方查证后,实现了一个最简单的嵌套多层的复杂拖动效果,另外在后面附上了jquery-ui推荐的拖动方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Draggable - Constrain movement</title>
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<style>
.outer {
width: 800px;
height: 600px;
border: 1px solid #ccc;
overflow: hidden;
margin: auto;
}
.middle {
width: 200px;
height: 200px;
margin: auto;
overflow: hidden;
border: 1px solid blue;
}
.inside {
width: 50px;
height: 50px;
margin: auto;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="outer">
<div class="middle">
<p class="inside"></p>
</div>
</div>
</body>
</html>
<script type="text/javascript">
$(function () {
var move = {}, curr;
move.x = move.y = move.mousekey = 0;
$(document).on("mousedown", function (e) {
curr = e.originalEvent.srcElement;//获取当前选中的标签对象
e.stopPropagation(); //阻止事件冒泡(事件穿透)
move.mousekey = true;
$(curr).css("cursor", "move");
$(curr).css('position', 'relative');
$(curr).parent().css('position', 'relative');
var left = $(curr).css("left");
var top = $(curr).css("top");
move.x = e.pageX - parseInt(left == 'auto' ? 0 : left);
move.y = e.pageY - parseInt(top == 'auto' ? 0 : top);
}).on('mouseout', function () {
move.mousekey = false;
$(curr).css("cursor", "default");
}).on('mousemove', function (e) {
if (move.mousekey) {
$(curr).css({ top: e.pageY - move.y, left: e.pageX - move.x });
}
}).on('mouseup', function () {
move.mousekey = false;
$(curr).css("cursor", "default");
});
});
</script>
jquery-ui推荐的拖动方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery UI Draggable - Constrain movement</title>
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<style>
.outer {
width: 800px;
height: 600px;
border: 1px solid #ccc;
overflow: hidden;
margin: auto;
}
.middle {
width: 200px;
height: 200px;
margin: auto;
overflow: hidden;
border: 1px solid blue;
}
.inside {
width: 50px;
height: 50px;
margin: auto;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="outer">
<div class="middle ui-widget-content">
<p class="inside ui-widget-content"></p>
</div>
</div>
</body>
</html>
<script type="text/javascript">
$(function () {
$(".middle").draggable();
$(".inside").draggable();
});
</script>