vue element el-transfer增加拖拽功能


Posted in Vue.js onJanuary 15, 2021

芯资管项目要求el-transfer增加拖拽排序,左右上下互相拖拽功能;
原来的组件不支持拖拽,这里要用个第三方脱宅组件sortablejs

首先安装

sudo npm i sortablejs --save-dev

html代码

<template>
  <el-transfer ref="transfer" id="transfer" v-model="value" :data="data">
   <span slot-scope="{ option }" :draggable="!option.disabled" @dragstart="drag($event,option)">{{ option.key }} - {{ option.label }}</span>
  </el-transfer>
</template>```

create

<script>

   import Sortable from 'sortablejs'

   export default {
      data() {
        const generateData = _ => {
          const data = []; for (let i = 1; i <= 15; i++) {
            data.push({
              key: i,
              label: `备选项 ${i}`,
              disabled: i % 4 === 0 });
          } return data;
        }; return {
          data: generateData(),
          value: [1, 4],
          draggingKey : null }
      },
      mounted() {
        const transfer = this.$refs.transfer.$el
        const leftPanel = transfer.getElementsByClassName("el-transfer-panel")[0].getElementsByClassName("el-transfer-panel__body")[0];
        const rightPanel = transfer.getElementsByClassName("el-transfer-panel")[1].getElementsByClassName("el-transfer-panel__body")[0];
        const rightEl = rightPanel.getElementsByClassName("el-transfer-panel__list")[0]
        Sortable.create(rightEl,{
          onEnd: (evt) => {
            const {oldIndex,newIndex} = evt;
            const temp = this.value[oldIndex] 
            if (!temp || temp === 'undefined') {
              return
            }// 解决右边最后一项从右边拖左边,有undefined的问题
            this.$set(this.value,oldIndex,this.value[newIndex])  
            this.$set(this.value,newIndex,temp)
          }
        })
        const leftEl = leftPanel.getElementsByClassName("el-transfer-panel__list")[0]
        Sortable.create(leftEl,{
          onEnd: (evt) => {
            const {oldIndex,newIndex} = evt;
            const temp = this.data[oldIndex] 
            if (!temp || temp === 'undefined') {
              return
            } // 解决右边最后一项从右边拖左边,有undefined的问题
            this.$set(this.data,oldIndex,this.data[newIndex]) 
            this.$set(this.data,newIndex,temp)
          }
        })
        leftPanel.ondragover = (ev) => {
          ev.preventDefault()
        }
        leftPanel.ondrop = (ev) => {
          ev.preventDefault();
          const index = this.value.indexOf(this.draggingKey) if(index !== -1){ this.value.splice(index,1)
          }
        }
        rightPanel.ondragover = (ev) => {
          ev.preventDefault()
        }
        rightPanel.ondrop = (ev) => {
          ev.preventDefault();  if(this.value.indexOf(this.draggingKey) === -1){ this.value.push(this.draggingKey)
          }
        }
      },
      methods: {
        drag(ev,option) { this.draggingKey = option.key
        }
      }

    } 
</script>

到此这篇关于vue element el-transfer增加拖拽功能的文章就介绍到这了,更多相关element el-transfer拖拽内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
Vue 打包的静态文件不能直接运行的原因及解决办法
Nov 19 Vue.js
Vue如何跨组件传递Slot的实现
Dec 14 Vue.js
vue实现图片裁剪后上传
Dec 16 Vue.js
VUE实现吸底按钮
Mar 04 Vue.js
Vue实现下拉加载更多
May 09 Vue.js
Vue详细的入门笔记
May 10 Vue.js
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 Vue.js
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
May 25 Vue.js
vue中 this.$set的使用详解
Nov 17 Vue.js
VUE之图片Base64编码使用ElementUI组件上传
Apr 09 Vue.js
VUE解决跨域问题Access to XMLHttpRequest at
May 06 Vue.js
ant design vue的form表单取值方法
Jun 01 Vue.js
Vue实现多页签组件
Jan 14 #Vue.js
如何在vue中使用HTML 5 拖放API
Jan 14 #Vue.js
Vue中引入svg图标的两种方式
Jan 14 #Vue.js
vue+element table表格实现动态列筛选的示例代码
Jan 14 #Vue.js
vue 递归组件的简单使用示例
Jan 14 #Vue.js
vue element和nuxt的使用技巧分享
Jan 14 #Vue.js
vue动态设置路由权限的主要思路
Jan 13 #Vue.js
You might like
菜鸟学PHP之Smarty入门
2007/01/04 PHP
网站用php实现paypal整合方法
2010/11/28 PHP
使用JSON实现数据的跨域传输的php代码
2011/12/20 PHP
php自定义urlencode,urldecode函数实例
2015/03/24 PHP
php无序树实现方法
2015/07/28 PHP
PHP导出带样式的Excel示例代码
2016/08/28 PHP
php获取数据库结果集方法(推荐)
2017/06/01 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
IE与FireFox的兼容性问题分析
2007/04/22 Javascript
兼容ie和firefox js关闭代码
2008/12/11 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
js评分组件使用详解
2017/06/06 Javascript
express如何使用session与cookie的方法
2018/01/30 Javascript
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
基于jquery实现九宫格拼图小游戏
2018/11/30 jQuery
Python中的文件和目录操作实现代码
2011/03/13 Python
python抓取网页中的图片示例
2014/02/28 Python
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
深入理解Python中各种方法的运作原理
2015/06/15 Python
python面向对象法实现图书管理系统
2019/04/19 Python
python opencv实现证件照换底功能
2019/08/19 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
如何基于Python pygame实现动画跑马灯
2020/11/18 Python
HTML5 新标签全部总汇(推荐)
2016/06/13 HTML / CSS
canvas仿写贝塞尔曲线的示例代码
2017/12/29 HTML / CSS
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
2020/07/20 HTML / CSS
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
金鑫耀Java笔试题
2014/09/06 面试题
公益广告语集锦
2014/03/13 职场文书
团队精神的演讲稿
2014/05/14 职场文书
应聘护士求职信
2014/07/21 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
使用Springboot实现健身房管理系统
2021/07/01 Java/Android