本文主要写一下如何实现dom元素拖动,目前使用jquery库实现之。
主要的注释附在代码中,大家可以根据代码画一个小的窗口模型图,以便于理解。
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="utf-8">
5 <title>实现dom元素拖动</title>
6 <style>
7 .dialog {
8 position: absolute;
9 top: 0;
10 left: 0;
11 width: 500px;
12 height: 400px;
13 background-color: blue;
14 }
15 </style>
16 <script src="js/jquery-1.7.2.js"></script>
17 </head>
18 <body>
19 <div class="dialog dialog-drag">拖动</div>
20 <script>
21 (function($) {
22 var windowWidth,
23 windowHeight,
24 mouseToDialogX,
25 mouseToDialogY,
26 dialogWidth,
27 dialogHeight;
28 var $target,
29 $doc = $(document);
30 var _move = function(e) {
31 var nowTop,
32 nowLeft,
33 pageX = e.pageX,
34 pageY = e.pageY;
35 // top
36 // 界限值:当对话框拖动到上边界时,将top置为0
37 if (pageY - mouseToDialogY < 0) {
38 nowTop = 0;
39 }
40 // 界限值:当对话框拖动到下边界时,将top置为(窗口高度-对画框高度),即将对话框底部与页面平齐
41 else if (dialogHeight + (pageY - mouseToDialogY) > windowHeight) {
42 nowTop = windowHeight - dialogHeight;
43 }
44 // 正常值:鼠标纵向坐标-鼠标纵向坐标与对话框上边缘的距离
45 else {
46 nowTop = pageY - mouseToDialogY;
47 }
48 // left - 解释同上
49 if (pageX - mouseToDialogX < 0) {
50 nowLeft = 0;
51 } else if (dialogWidth + (pageX - mouseToDialogX) > windowWidth) {
52 nowLeft = windowWidth - dialogWidth;
53 } else {
54 nowLeft = pageX - mouseToDialogX;
55 }
56 $target.css({
57 left: nowLeft,
58 top: nowTop
59 });
60 };
61 // 拖动开始
62 $doc.on('mousedown', '.dialog-drag', function (e) {
63 var $this = $(this),
64 $win = $(window);
65 $target = $this;
66 windowWidth = $win.width();
67 windowHeight = $win.height();
68 mouseToDialogX = e.pageX - $this.offset().left;
69 mouseToDialogY = e.pageY - $this.offset().top;
70 dialogWidth = $this.width();
71 dialogHeight = $this.height();
72 // 只有对话框拖动时,才会有mousemove事件
73 $(document).on('mousemove', _move);
74 });
75 // 拖动结束
76 $doc.on('mouseup', '.dialog-drag', function (e) {
77 $target = null;
78 // 当拖动结束时, 解绑mousemove事件
79 $(document).off('mousemove', _move);
80 });
81 })(jQuery);
82
83 </script>
84 </body>
85 </html>
来源:https://www.cnblogs.com/jinguangguo/p/4072269.html