我是靠谱客的博主 超帅自行车,最近开发中收集的这篇文章主要介绍原生js表格内容拖拽 FroSro(CSDN),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

由于有新的需求,所以我参考了网上的一些资料,自己做了一个拖拽功能的demo,直接上代码。

<!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表格内容拖拽 FroSro(CSDN)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部