原生JS表格行拖動排序,添加了回調功能__javascript

來源:互聯網
上載者:User
function tableDnD(el, callback) {    if (typeof (el) == "string") {        el = document.getElementById(el);    }    if (el == undefined || el == null) {        return;    }//綁定事件  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 = {clientY: 0,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 y = e.clientY;var down = y > dragManager.clientY; //是否向下移動  var tr = document.elementFromPoint(e.clientX, e.clientY);if (tr && tr.nodeName == "TD") {tr = tr.parentNodedragManager.clientY = y;if (dragObj !== tr && dragObj.parentNode===tr.parentNode) {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";dragManager.clientY = e.clientY;addEvent(document, "mousemove", dragManager.draging);addEvent(document, "mouseup", dragManager.dragEnd);}},dragEnd: function (e) {var dragObj = dragManager.dragObjif (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);if(typeof(callback)=='function'){    callback(target);}}}},main: function (el) {addEvent(el, "mousedown", dragManager.dragStart);}}dragManager.main(el);}//調用:tableDnD(document.getElementById("tbody1"),callback);   //參數可以是table的ID或者tbody的ID

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.