jquery实现table表格的拖拽排序

 1         function addEvent(el,list){  // 参数说明:(table对象,数据列表)
 2             $(el).find('tbody>tr').each(function(i, ele){
 3 
 4                 $(ele).off("dragstart dragover dragleave drop");
 5 
 6                 $(ele).on('dragstart', function(event){
 7                     let evt = event.originalEvent;
 8                     evt.dataTransfer.setData('Text', i);
 9                     evt.dataTransfer.effectAllowed = 'move';
10                 })
11                 .on( 'dragover', function(event){
12                     console.log('dragover');
13                     event.preventDefault();  
14                     let targetRect = event.currentTarget.getBoundingClientRect();
15                     let clientY = event.originalEvent.clientY;
16                     let clientYt = targetRect.height/2+targetRect.top;
17                     let $ele = $(event.currentTarget);
18                     if(clientY<clientYt){
19                         $ele.removeClass('up');
20                         $ele.addClass('down');
21                     } else {
22                         $ele.addClass('up');
23                         $ele.removeClass('down');
24                     }
25                 })
26                 .on( 'drop', function(event){
27                     let index1 = +event.originalEvent.dataTransfer.getData('Text');
28                     let index2 = i;
29                     event.target.parentNode.classList.remove('over');
30                     event.target.parentNode.classList.remove('up');
31                     event.target.parentNode.classList.remove('down');
32                     if(index1!=index2){
33                         let targetRect = event.currentTarget.getBoundingClientRect();
34                         let clientY = event.originalEvent.clientY;
35                         let middle = targetRect.height/2+targetRect.top;
36                         if(clientY<middle){
37                             list.splice(index2, 0, list[index1]);
38                             list.splice(index1+(index1-index2>0?1:0), 1);
39                         } else {
40                             list.splice(index2+1 , 0, list[index1]);
41                             list.splice(index1+(index1-index2>0?1:0) , 1);
42                         }
43                     }
44 
45                 })
46                 .on( 'dragleave', function(event){
47                     event.target.parentNode.classList.remove('over');
48                     event.target.parentNode.classList.remove('up');
49                     event.target.parentNode.classList.remove('down');
50                 });
51             });
52         },

 

css样式:(scss的写法)

 1 table {
 2     width: 100%;
 3     border-collapse:collapse;
 4      border: 1px solid #DDD;
 5     tr {
 6 
 7         td,th {
 8             height: 40px;
 9             border: 1px #DDD solid;
10             text-align: center;
11         }
12     }
13 
14     tr[draggable="true"]{
15         cursor: move;
16         transition: all .3s;
17         &.up{
18             background-color: #f9ead5!important;
19             transform: translateY(-50%);
20         }
21         &.down{
22             background-color: #f9ead5!important;
23             transform: translateY(50%);
24         }
25     }
26     
27     thead {
28         background-color: #DDD;
29     }
30 }

 

注意一点,可以拖拽的tr需要设置,draggable="true"

 

转载于:https://www.cnblogs.com/summer0319/p/7445204.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值