前端表格拖拽效果(二)


代码:

        /*服务配置拖拽效果*/

        function drag() {
         var startPoint = "";
         var endPoint = "";
         var lis = document.getElementsByClassName('lot_box');
         //绑定事件
         var addEvent = document.addEventListener ? function(el,type,callback){
            el.addEventListener( type, callback, !1 );
         } : function(el,type,callback){
            el.attachEvent( "on" + type, callback );
         }
         //判定对样式的支持
         var getStyleName= (function(){
            var prefixes = ['', '-ms-','-moz-', '-webkit-', '-khtml-', '-o-'];
            var reg_cap = /-([a-z])/g;
            function getStyleName(css, el) {
               el = el || document.documentElement;
               var style = el.style,test;
               for (var i=0, l=prefixes.length; i < l; i++) {
                  test = (prefixes[i] + css).replace(reg_cap,function($0,$1){
                     return $1.toUpperCase();
                  });
                  if(test in style){
                     return test;
                  }
               }
               return null;
            }
            return getStyleName;
         })();
         var userSelect = getStyleName("user-select");
         //精确获取样式
         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 = {
            y:0,
            dragStart:function(e){
               e = e || event;
               var handler = e.target || e.srcElement;
               if(handler.nodeName === "TD"){
                  handler = handler.parentNode;
                  dragManager.handler = handler;
                  if(!handler.getAttribute("data-background")){
                     handler.setAttribute("data-background",getStyle(handler,"background-color"))
                  }
                  //获取起点的位置参数,用于传给后台
                  for(var j = 0; j < lis.length; j++){
                     if(handler.id == lis[j].id){
                        startPoint = j;
                        break;
                     }
                  }
                  //显示为可移动的状态
                  handler.style.backgroundColor = "#ccc";
                  handler.style.cursor = "move";
                  dragManager.y = e.clientY;
                  if(typeof userSelect === "string"){
                     return document.documentElement.style[userSelect] = "none";
                  }
                  document.unselectable = "on";
                  document.onselectstart = function(){
                     return false;
                  }
               }
            },
            draging:function(e){  //mousemove时拖动行
               var handler = dragManager.handler;
               if(handler){
                  e = e || event;
                  var y = e.clientY;
                  var down = y > dragManager.y;//是否向下移动
                  var tr = document.elementFromPoint(e.clientX,e.clientY);
                  if(tr && tr.nodeName == "TD"){
                     tr = tr.parentNode
                     dragManager.y = y;
                     if( handler !== tr){
                        tr.parentNode.insertBefore(handler, (down ? tr.nextSibling : tr));
                     }
                  };
               }
            },
            dragEnd:function(e){
               var handler = dragManager.handler;
               if (handler) {
                  handler.style.backgroundColor = handler.getAttribute("data-background");
                  handler.style.cursor = "default";
                  dragManager.handler = null;
                  //获取起点的位置参数,用于传给后台
                  for(var k = 0; k < lis.length; k++){
                     if(handler.id == lis[k].id){
                        endPoint = k;
                        break;
                     }
                  }
               }
               //发送请求到后台   ------   此处是根据当时的需求传到后台去记住当时修改的服务顺序的。
               var url = base_path+"console/cfg/baseLayer/change";
               $.ajax({
                  url:url,
                  type:"post",
                  data:{
                     "endPoint":endPoint,
                     "startPoint":startPoint,
                     "tr_id":handler.id,
                     "tpl":configId
                  },
                  dataType:"json",
                  success:function (result) {
                     ready();
                  }
               });
               if(typeof userSelect === "string"){
                  return document.documentElement.style[userSelect] = "text";
               }

//             document.unselectable = "off";
//             document.onselectstart = null;

            },
            main:function(el){
               addEvent(el,"mousedown",dragManager.dragStart);
               addEvent(document,"mousemove",dragManager.draging);
               addEvent(document,"mouseup",dragManager.dragEnd);
            }
         } 
         var el = document.getElementById("table");   //此处用于获取页面上的table,直接更改此处的id即可。
         dragManager.main(el);
      }



---------------------------------------------------编辑分割线-------------------------------------------------------
可以直接测试的demo:

<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>行拖动</title>

<script>
 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 getStyleName= (function(){
  var prefixes = ['', '-ms-','-moz-', '-webkit-', '-khtml-', '-o-'];
  var reg_cap = /-([a-z])/g;
  function getStyleName(css, el) {
  el = el || document.documentElement;
  var style = el.style,test;
  for (var i=0, l=prefixes.length; i < l; i++) {
  test = (prefixes[i] + css).replace(reg_cap,function($0,$1){
  return $1.toUpperCase();
  });
  if(test in style){
  return test;
  }
  }
  return null;
  }
  return getStyleName;
 })();
 var userSelect = getStyleName("user-select");
 //精确获取样式
 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 = {
  y:0,
  dragStart:function(e){
  e = e || event;
  var handler = e.target || e.srcElement;
  if(handler.nodeName === "TD"){
  handler = handler.parentNode;
  dragManager.handler = handler;
  if(!handler.getAttribute("data-background")){
  handler.setAttribute("data-background",getStyle(handler,"background-color"))
  }
  //显示为可移动的状态
  handler.style.backgroundColor = "#ccc";
  handler.style.cursor = "move";
  dragManager.y = e.clientY;
  if(typeof userSelect === "string"){
  return document.documentElement.style[userSelect] = "none";
  }
  document.unselectable = "on";
  document.onselectstart = function(){
  return false;
  }
  }
  },
  draging:function(e){//mousemove时拖动行
  var handler = dragManager.handler;
  if(handler){
  e = e || event;
  var y = e.clientY;
  var down = y > dragManager.y;//是否向下移动
  var tr = document.elementFromPoint(e.clientX,e.clientY);
  if(tr && tr.nodeName == "TD"){
  tr = tr.parentNode
  dragManager.y = y;
  if( handler !== tr){
   tr.parentNode.insertBefore(handler, (down ? tr.nextSibling : tr));
  }
  };
  }
  },
  dragEnd:function(){
  var handler = dragManager.handler
  if (handler) {
  handler.style.backgroundColor = handler.getAttribute("data-background");
  handler.style.cursor = "default";
  dragManager.handler = null;
  }
  if(typeof userSelect === "string"){
  return document.documentElement.style[userSelect] = "text";
  }
  document.unselectable = "off";
  document.onselectstart = null;
  },
  main:function(el){
  addEvent(el,"mousedown",dragManager.dragStart);
  addEvent(document,"mousemove",dragManager.draging);
  addEvent(document,"mouseup",dragManager.dragEnd);
  }
 }
 var el = document.getElementById("table");
 dragManager.main(el);
 }

</script>
<style>
.table{width:60%;border: 1px solid red;border-collapse: collapse;}
.table td{border: 1px solid red;height: 20px;}
</style>
</head>
<body>
<h1>行拖动</h1>
<table id="table" class="table">
<tbody>
<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>
</tbody>
</table>
</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值