2022-06-01
实现代码:
<!-- HTML --> <h1>表格行拖动</h1> <table id="table" class="table"> <tr> <td>1</td> <td>One</td> <td>dom.require</td> </tr> <tr id="2"> <td class="2">2</td> <td>Two</td> <td>ControlJS</td> </tr> <tr id="3"> <td class="3">3</td> <td>Three</td> <td>HeadJS</td> </tr> <tr id="4"> <td class="4">4</td> <td>Four</td> <td>LAB.js</td> </tr> <tr id="5"> <td class="5">5</td> <td>Five</td> <td>$script.js</td> </tr> <tr id="6"> <td class="6">6</td> <td>Six</td> <td>NBL.js</td> </tr> </table>
/* CSS */
.table {
width: 60%;
border: 1px solid red;
border-collapse: collapse;
}
.table td {
border: 1px solid red;
height: 20px;
}//JavaScript
window.onload = function () {
//绑定事件
var addEvent = document.addEventListener ? function (el, type, callback) {
el.addEventListener(type, callback, !1);
} : function (el, type, callback) {
el.attachEvent("on" + type, callback);
}
//移除事件
var removeEvent = document.removeEventListener ? function (el, type, callback) {
el.removeEventListener(type, callback);
} : function (el, type, callback) {
el.detachEvent("on" + type, callback);
}
//精确获取样式
var getStyle = document.defaultView ? function (el, style) {
return document.defaultView.getComputedStyle(el, null).getPropertyValue(style)
} : function (el, style) {
style = style.replace(/\-(\w)/g, function ($, $1) {
return $1.toUpperCase();
});
return el.currentStyle[style];
}
var dragManager = {
draging: function (e) {//mousemove时拖动行
var dragObj = dragManager.dragObj;
if (dragObj) {
e = e || event;//清除选区
if (window.getSelection) {//w3c
window.getSelection().removeAllRanges();
} else if (document.selection) {
document.selection.empty();//IE
}
var tr = document.elementFromPoint(e.clientX, e.clientY);
if (tr && tr.nodeName == "TD") {
tr = tr.parentNode
if (dragObj !== tr) {
var y = tr.getBoundingClientRect().top;
var down = y > dragObj.getBoundingClientRect().top;//是否向下移动
tr.parentNode.insertBefore(dragObj, (down ? tr.nextSibling : tr));
}
};
}
},
dragStart: function (e) {
e = e || event;
var target = e.target || e.srcElement;
if (target.nodeName === "TD") {
target = target.parentNode;
dragManager.dragObj = target;
if (!target.getAttribute("data-background")) {
var background = getStyle(target, "background-color");
target.setAttribute("data-background", background)
}
//显示为可移动的状态
target.style.backgroundColor = "#ccc";
target.style.cursor = "move";
addEvent(document, "mousemove", dragManager.draging);
addEvent(document, "mouseup", dragManager.dragEnd);
}
},
dragEnd: function (e) {
var dragObj = dragManager.dragObj
if (dragObj) {
e = e || event;
var target = e.target || e.srcElement;
if (target.nodeName === "TD") {
target = target.parentNode;
dragObj.style.backgroundColor = dragObj.getAttribute("data-background");
dragObj.style.cursor = "default";
dragManager.dragObj = null;
removeEvent(document, "mousemove", dragManager.draging);
removeEvent(document, "mouseup", dragManager.dragEnd);
}
}
},
main: function (el) {
addEvent(el, "mousedown", dragManager.dragStart);
}
}
var el = document.getElementById("table");
dragManager.main(el);
}摘自 https://blog.csdn.net/weixin_44256803/article/details/117520891