vue实现拖拽表格_仿拖拽实现两个表格之间的行拖拽(A->B)和拖拽到某一个单元格

1.从需求出发,一个页面有两个表格 right 和left,要把left表格的选择行的数据 拖拽到right的某一行上某个单元格,鼠标松开时,组装right的表格数据
2.如何实现,在left表格上按下改变鼠标样式,在right表格上鼠标抬起时获取left表格的勾选行数据和right鼠标当前行的数据,最后是鼠标抬起时恢复鼠标的样式.
首先在left表格上监听鼠标按下事件

const that =this
const leftTable=this.$refs.leftTable.$el
const rightTable=this.$refs.rightTable.$el
// 左边表格
leftTable.onmousedown = function(event) { // 按下鼠标时,初始化处理
      // 记录在left表格上按下了鼠标
      that.leftTableDown = true
      // 修改鼠标样式为移动图片(自行去网上找个图片就行了)
      document.body.style.cursor = `url(${that.imgUrl}) 12 12,pointer`
}
// 右边表格
// 鼠标抬起事件
rightTable.onmouseup=function(event){
      if(that.leftTableDown){// 在left上按下了鼠标
        const pathDom = event.path.find(x => {
          if (x.localName === 'tr') return x
        })
        if (!pathDom) {
          that.$message.error('请拖放在表格行上')
          return
        }
        const rowIndex = pathDom.rowIndex
        //在这里可以处理right数据组装逻辑,获取左边表格勾选行数据和右边表格当前行数据
        //注意:匹配的话,只能用event中有的值
        that.$message.success(`落在了第: ${rowIndex + 1}行!`)
      }
}
// 鼠标抬起时鼠标样式还原
document.onmouseup = function(event) {
      document.body.style.cursor = 'auto'
}
// 鼠标移动时会复制文字 如果想禁用复制,则加入一下代码
rightTable.onselectstart = function() {
      return false
    }
leftTable.onselectstart = function() {
      return false
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的示例代码,基于Vue2,antd和sortablejs实现表格拖拽功能。 ```html <template&gt; <div&gt; <h2&gt;表格1</h2&gt; <table&gt; <thead&gt; <tr&gt; <th&gt;姓名</th&gt; <th&gt;年龄</th&gt; </tr&gt; </thead&gt; <tbody v-sortable="{onEnd: onEnd1}"&gt; <tr v-for="(item, index) in list1" :key="item.id"&gt; <td&gt;{{ item.name }}</td&gt; <td&gt;{{ item.age }}</td&gt; </tr&gt; </tbody&gt; </table&gt; <h2&gt;表格2</h2&gt; <table&gt; <thead&gt; <tr&gt; <th&gt;姓名</th&gt; <th&gt;年龄</th&gt; </tr&gt; </thead&gt; <tbody v-sortable="{onEnd: onEnd2}"&gt; <tr v-for="(item, index) in list2" :key="item.id"&gt; <td&gt;{{ item.name }}</td&gt; <td&gt;{{ item.age }}</td&gt; </tr&gt; </tbody&gt; </table&gt; </div&gt; </template&gt; <script&gt; import Sortable from 'sortablejs' export default { data() { return { list1: [ { id: 1, name: '张三', age: 18 }, { id: 2, name: '李四', age: 20 }, { id: 3, name: '王五', age: 22 }, ], list2: [], } }, mounted() { // 表格1和表格2都可以拖拽到另一个表格中 Sortable.create(this.$el.querySelector('tbody'), { group: 'table', animation: 150, fallbackOnBody: true, swapThreshold: 0.65, }) }, methods: { onEnd1(evt) { if (evt.newIndex !== undefined) { // 从表格1拖拽表格2 this.list2.push(this.list1.splice(evt.oldIndex, 1)[0]) } }, onEnd2(evt) { if (evt.newIndex !== undefined) { // 从表格2拖拽表格1 this.list1.push(this.list2.splice(evt.oldIndex, 1)[0]) } }, }, } </script&gt; ``` 在此示例中,我们使用了Vue的v-sortable指令来绑定Sortable实例。在mounted钩子函数中,我们为两个表格的tbody元素创建了Sortable实例,并将它们分组为“table”。然后,我们分别在onEnd1和onEnd2方法中处理拖拽完成事件,并将拖拽数据一个表格移动到另一个表格

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值