首页 > 其他分享 >vue3+antd+jsx 实现表格行数据排序的动画效果

vue3+antd+jsx 实现表格行数据排序的动画效果

时间:2023-02-23 10:24:47浏览次数:66  
标签:end undefined start let vue3 antd ev jsx event

------------恢复内容开始------------

vue3的写法

转载https://blog.csdn.net/qq_51898604/article/details/128973430
因为ant-design表格组件没有封装拖拽排序的方法,需要通过customRow这个属性进行自定义排序。

因为项目的原因所以使用的是typescript

<a-table :customRow="customRow" :columns="columns" :data-source="dataSource">
........
</a-table>

ts代码

// 位置记录
    const position = {
      start: undefined as number | undefined,
      end: undefined as number | undefined,
      sourceEl: undefined as undefined | HTMLTableRowElement,
    }
    // 排序
    const reorder = ({ start, end }) => {
      if (start !== undefined && end !== undefined) {
        if (start > end) {
          // 当开始大于结束
          let temp = dataSource.value[start]
          dataSource.value.splice(start, 1);
          dataSource.value.splice(end, 0, temp)
        } else if (start < end) {
          // 结束大于开始
          let temp = dataSource.value[start]
          dataSource.value.splice(start, 1)
          dataSource.value.splice(end + 1, 0, temp)
        }
        let arr: string[] = dataSource.value?.map((item: any) => item.id)
        emit("onDeviceList", arr)
      }
    }
    function customRow(_record, index) {
      return {
        style: {
          cursor: "move",
        },
        // 鼠标移入
        onm ouseenter: (event) => {
          // 兼容IE
          let ev = event || window.event;
          ev.target.draggable = true;
        },
        // 开始拖拽
        onDragstart: (event) => {
          // 兼容IE
          let ev = event || window.event;
          // 阻止冒泡
          ev.stopPropagation();
          // 得到源目标数据;
          position.start = index
          const tr = ev.target as HTMLTableRowElement
          position.sourceEl = tr
        },
        // 拖动元素经过的元素
        onDragover: (event) => {
          let ev = event || window.event;
          // 阻止默认行为
          ev.preventDefault();
        },
        // 松开
        onDrop: (event) => {
          let ev = event || window.event;
          // 阻止默认行为
          ev.preventDefault();
          position.end = index
          reorder(position);
          animation(position)
        },
      };
    }
    // 实现动画效果
    function animation({ start, end, sourceEl }) {
      // 48 是每行的高度,也可以自动获取,根据情况而定
      let count = 48 * (start! - end!)
      sourceEl.style.translate = `0px ${count}px`
      setTimeout(() => {
        sourceEl!.style.transition = "all 0.5s"
        sourceEl!.style.translate = `0px 0px`
      })
    }

另一个方案

https://blog.csdn.net/lhz_333/article/details/122347795

问题本质

1.拖拽的本质

a.鼠标移入元素,给元素的一个可拖拽的属性。ev.target.draggable
b.鼠标离开元素时,让ev.target.draggable 为false

2.过渡的本质

a.弄清transition和animation的区别,此时选择transtion
b.确定元素,起始位置坐标
c.使用css的过渡,要明白3t的不同概念。3t(transition,transform,translate)

标签:end,undefined,start,let,vue3,antd,ev,jsx,event
From: https://www.cnblogs.com/cn-oldboy/p/17146978.html

相关文章

  • Vue3自定义指令
    Vue3自定义指令自定义指令的定义:自定义指令是用来操作DOM的,尽管vue推崇数据驱动视图的理念,但并非所有情况都适合数据驱动。自定义指令就是一种有效的补充和拓展,不仅仅......
  • vue3的element plusd的全局注册的dialog的弹窗空白区域点击无法关闭
    在main.js里面注册//全局修改默认配置,点击空白处不能关闭弹窗app._context.components.ElDialog["props"].closeOnClickModal.default=false//全局修改默认配置,按......
  • vue3介绍-vue3创建项目-setup函数-ref和reactive-计算属性和监听-生命周期-toRefs-scr
    目录vue3介绍-vue3创建项目-setup函数-ref和reactive-计算属性和监听-生命周期-toRefs-scriptsetup的作用和lang=ts-vue后台管理模板昨日内容回顾今日内容概要今日内容详......
  • vue3.x基本使用
    今日内容vue3介绍#1vue项目的版本新项目使用vue3有部分来项目使用2#vue3的变化1.性能的提升 -打包大小减少41% -初次渲染快55%,更新渲染快133%......
  • vue框架08 vue3
    vue3的介绍#vue项目的版本,新项目使用vue3,部分老项目使用vue2#vue3的变化1.性能的提升-打包大小减少41%-初次渲染快55%,更新渲染块133%......
  • vue_day08 vue3基本使用了解
    目录今日内容详细一、vue3介绍二、vue3创建项目1.使用vue-cli2.vite三、setup函数1.scriptsetup的作用和lang=ts四、ref和reactive五、计算属性和监听属性1.计算属性2.......
  • vue3介绍 vue3创建项目 扩展vite setup函数 ref和reactive 计算属性和监听属性 生命周
    目录回顾vue3介绍vue的变化组合式API与配置项APIvue3创建项目扩展之vite使用步骤setup函数ref和reactiverefreative总结:计算属性和监听属性计算属性获取get 修改set监听属......
  • Vue3
    目录Vue3vue3介绍vue3创建项目1.使用vue-cli创建2.vite创建vue项目setup函数1.setup函数2.vue2的创建vue实例和vue3创建vue实例的区别ref和reactivecomputed计算属性watc......
  • vue3 介绍、vue3 创建项目、setup函数、ref和reactive、计算属性和监听属性、生命周期
    目录1vue3介绍2vue3创建项目2.1使用vue-cli2.2vite3setup函数4ref和reactive5计算属性和监听属性5.1计算属性5.2监听属性6生命周期7toRefs8scriptsetup的作......
  • vue3快速上手
    Vue3快速上手1.Vue3简介2020年9月18日,Vue.js发布3.0版本,代号:OnePiece(海贼王)耗时2年多、2600+次提交、30+个RFC、600+次PR、99位贡献者github上的tags地址:https://gi......