由于有新的需求,所以我参考了网上的一些资料,自己做了一个拖拽功能的demo,直接上代码。
复制代码
如果道友有好的建议还请多多指教,有问题可以私信我
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115<!DOCTYPE html> <html> <head> <title></title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type="text/css"> td{ border: 1px solid #000; height: 100px; width: 100px; } </style> </head> <body> <table style="float: left;"> <tr> <td></td> </tr> <tr> <td></td> </tr> </table> <table style="float: right;"> <tr> <td><div id="drag" >**********</div></td> <td><div id="drag2">11111111</div></td> </tr> <tr> <td><div id="drag3" >2222222</div></td> <td><div id="drag1">*3333333333</div></td> </tr> </table> <script type="text/javascript"> window.onload = function() { //拖拽功能(主要是触发三个事件:onmousedownonmousemoveonmouseup) var dragall = document.getElementsByTagName('div'); for (var i = 0; i < dragall.length; i++) { (function(){ dragall[i].onmousedown = function(e) { var drag = document.getElementById(e.currentTarget.id); var newdrag = drag.cloneNode(true); var oft = drag.offsetTop + drag.offsetParent.offsetTop + drag.offsetParent.offsetParent.offsetTop; var ofl = drag.offsetLeft + drag.offsetParent.offsetLeft + drag.offsetParent.offsetParent.offsetLeft; drag.parentNode.appendChild(newdrag); newdrag.style.cssText = "position:absolute;" newdrag.style.top = oft; newdrag.style.left = ofl; newdrag.style.cursor = 'move'; var e = e || window.event; //兼容ie浏览器 var diffX = e.clientX - ofl; //鼠标点击物体那一刻相对于物体左侧边框的距离=点击时的位置相对于浏览器最左边的距离-物体左边框相对于浏览器最左边的距离 var diffY = e.clientY - oft; if(typeof drag.setCapture!='undefined'){ drag.setCapture(); } document.onmousemove = function(e) { var e = e || window.event; //兼容ie浏览器 var left=e.clientX-diffX; var top=e.clientY-diffY; //控制拖拽物体的范围只能在浏览器视窗内,不允许出现滚动条 if(left<0){ left=0; }else if(left >window.innerWidth-drag.offsetWidth){ left = window.innerWidth-drag.offsetWidth; } if(top<0){ top=0; }else if(top >window.innerHeight-drag.offsetHeight){ top = window.innerHeight-drag.offsetHeight; } //移动时重新得到物体的距离,解决拖动时出现晃动的现象 newdrag.style.left = left+ 'px'; newdrag.style.top = top + 'px'; }; document.onmouseup = function(e) { //当鼠标弹起来的时候不再移动 this.onmousemove = null; this.onmouseup = null; //预防鼠标弹起来后还会循环(即预防鼠标放上去的时候还会移动) newdrag.parentNode.removeChild(newdrag); var e = e || window.event; //兼容ie浏览器 var tdall = document.getElementsByTagName('td'); for (var i = 0; i < tdall.length; i++) { var box_x = tdall[i].offsetLeft + tdall[i].offsetParent.offsetLeft + tdall[i].offsetParent.offsetParent.offsetLeft; var box_y = tdall[i].offsetTop + tdall[i].offsetParent.offsetTop + tdall[i].offsetParent.offsetParent.offsetTop; var box_width = tdall[i].offsetWidth; //容器宽 var box_height = tdall[i].offsetHeight; if(e.clientX > box_x && e.clientX < box_x-0+box_width && e.clientY > box_y && e.clientY < box_y-0+box_height){ if(box_x !== ofl || box_y !== oft){ if (tdall[i].children.length < 1) { var tmpdrag = drag.cloneNode(true); tdall[i].appendChild(tmpdrag); drag.parentNode.removeChild(drag); } onload(); } } } //修复低版本ie bug if(typeof drag.releaseCapture!='undefined'){ drag.releaseCapture(); } }; }; })(); }; }; </script> </body> </html>
最后
以上就是超帅自行车最近收集整理的关于原生js表格内容拖拽 FroSro(CSDN)的全部内容,更多相关原生js表格内容拖拽内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复