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