Vue拖拽交换数据(非插件)
HelloWorld.vue 文件
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<div>
<div class="team" v-for="(team,tindex) in teamDataArr" :key="tindex">
<div class="member" v-for="(item,cindex) in team.children" :key="cindex" :data-id="tindex+'-'+cindex" draggable="true" @dragstart="onDragstart($event)" @dragend="onDragend($event)" @dragover="onDragover($event)" @drop="onDrop($event)">
<div>{{item.id}}</div>
<div>{{item.name}}</div>
<div>{{item.mobile}}</div>
</div>
</div>
</div>
</div>
</template> <script>
export default {
name: 'HelloWorld',
data () {
return {
msg: 'Hello World',
startExchangeIndex: '',
endExchangeIndex: '',
teamDataArr: [
{
teamName: 'A队',
children: [
{
id: 1,
name: 'aaa',
mobile: '18012345678'
},
{
id: 2,
name: 'bbb',
mobile: '18112345678'
},
{
id: 3,
name: 'ccc',
mobile: '18212345678'
},
{
id: 4,
name: 'ddd',
mobile: '18312345678'
},
{
id: 5,
name: 'eee',
mobile: '18412345678'
}
]
},
{
teamName: 'B队',
children: [
{
id: 6,
name: 'fff',
mobile: '18512345678'
},
{
id: 7,
name: 'ggg',
mobile: '18612345678'
},
{
id: 8,
name: 'hhh',
mobile: '18712345678'
},
{
id: 9,
name: 'iii',
mobile: '18812345678'
},
{
id: 10,
name: 'jjj',
mobile: '18912345678'
}
]
},
{
teamName: 'C队',
children: [
{
id: 11,
name: 'kkk',
mobile: '19012345678'
},
{
id: 12,
name: 'lll',
mobile: '19112345678'
},
{
id: 13,
name: 'mmm',
mobile: '19212345678'
},
{
id: 14,
name: 'nnn',
mobile: '19312345678'
},
{
id: 15,
name: 'ooo',
mobile: '19412345678'
}
]
}
]
}
},
methods: {
onDragstart (event) {
// event.target 都返回源元素
this.startExchangeIndex = event.target.getAttribute('data-id')
console.log('拖拽开始')
},
onDragend (event) {
// event.target 都返回源元素
console.log('下标' + this.startExchangeIndex + ' 和 ' + this.endExchangeIndex + '进行替换') let startTeamIndex = parseInt(this.startExchangeIndex.split('-')[0])
let startMemberIndex = parseInt(this.startExchangeIndex.split('-')[1])
let endTeamIndex = parseInt(this.endExchangeIndex.split('-')[0])
let endMemberIndex = parseInt(this.endExchangeIndex.split('-')[1]) let _id = this.teamDataArr[endTeamIndex].children[endMemberIndex].id
let _name = this.teamDataArr[endTeamIndex].children[endMemberIndex].name
let _mobile = this.teamDataArr[endTeamIndex].children[endMemberIndex].mobile this.teamDataArr[endTeamIndex].children[endMemberIndex].id = this.teamDataArr[startTeamIndex].children[startMemberIndex].id
this.teamDataArr[endTeamIndex].children[endMemberIndex].name = this.teamDataArr[startTeamIndex].children[startMemberIndex].name
this.teamDataArr[endTeamIndex].children[endMemberIndex].mobile = this.teamDataArr[startTeamIndex].children[startMemberIndex].mobile this.teamDataArr[startTeamIndex].children[startMemberIndex].id = _id
this.teamDataArr[startTeamIndex].children[startMemberIndex].name = _name
this.teamDataArr[startTeamIndex].children[startMemberIndex].mobile = _mobile console.log('拖拽结束') },
onDrop (event) {
// event.target 都返回目标元素
if (event.target.className == 'member') {
this.endExchangeIndex = event.target.getAttribute('data-id')
} else {
this.endExchangeIndex = event.target.parentElement.getAttribute('data-id')
}
},
onDragover(event){
// 阻止元素的默认行为,不然ondrop不管用
event.preventDefault();
}
}, }
</script> <!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.team {
float: left;
border: 1px solid black;
margin-right: 20px;
}
.member {
overflow: hidden;
padding-left: 20px;
}
.member > div {
float: left;
margin:2px 5px;
border: 1px solid #eee;
padding: 5px
}
</style>
Vue拖拽交换数据(非插件)的更多相关文章
- Vue拖拽组件
vue开发公众号项目,***产品需要添加一个新的功能.拖拽功能.一听简单.百度上轮子挺多,直接拉一个过来用着就行.然鹅...兴奋之余,却失望至极.东西很多,没有一个能使得.你让我失望,那我就让你绝望. ...
- Xshell拖拽上传文件插件
lrzsz是一款在linux里可代替ftp上传和下载的程序.在linux中支持直接拖拽上传的插件:同时也支持rz和sz进行命令上传和下载. 插件安装 yum -y install lrzsz 上传(r ...
- vue拖拽组件开发
vue拖拽组件开发 创建临时vue项目 先查看node和npm版本,怎么安装就不多多bb了 再安装vue-cli npm install vue-cli -g //全局安装 vue-cli 检测是否安 ...
- vue拖拽插件(弹框拖拽)
// =======拖拽 插件 cnpm install vuedraggableimport draggable from 'vuedraggable' <draggable v-model= ...
- vue el-transfer新增拖拽排序功能---sortablejs插件
<template> <!-- target-order="unshift"必须设置,如果不设置的话后台穿的value值得顺序会被data重置 - --> ...
- Vue.Draggable:基于 Sortable.js 的 Vue 拖拽组件使用中遇到的问题
Sortable.js 介绍 https://segmentfault.com/a/1190000008209715 项目中遇到的问题: A - 我需要在项目的拖拽组件中,使用背景 1 - 想到的第一 ...
- Vue 拖拽组件 vuedraggable 和 vue-dragging
一.描述 之前用 vue 写过一个在线的多二维码生成服务,体验地址:https://postbird.gitee.io/vue-online-qrcode/ 后面发现二维码多了之后有时候想要排序,需要 ...
- vue 拖拽移动(类似于iPhone虚拟home )
vue 移动端 PC 兼容 元素 拖拽移动 效果演示 事件知识点 移动端 PC端 注释 touchstart mousedown 鼠标/手指按下事件 touchmove mousemove 鼠标/手 ...
- vue2-dragula vue拖拽组件
https://github.com/kristianmandrup/vue2-dragula git 地址 https://github.com/kristianmandrup/vue2-dragu ...
随机推荐
- E. Height All the Same
E. Height All the Same 题目大意: 给你一个n*m 的矩阵,让你在里面填数字代表这个位置的高度,数字的范围是[L,R],有两种操作,第一种就是给一位置的高度加2,第二种就是给两个 ...
- POI问题总结,关于数字级联及多级级联(三级以上)
目录 最近公司业务需要用到excel,并且要导出模板,今天为止所有的功能都已经实现了,在这里对出现的一些问题做一个总结. 效果图: 这是一个五级联动的数据,其中第一列是数字开头,实现了五级联动 问题1 ...
- gulp基本使用
一.gulp是什么 gulp强调的是前端开发的工作流程,我们可以通过定义task事件定义事件的执行顺序,gulp去执行这些事件,构建整个前端开发的工作流程 gulp常见定义事件,例如: 变更静态资源 ...
- ABAP 内表与XML转换
1需求说明 在系统交互中需要将SAP内表转换为XML文件,发送给其他系统,并且将其他系统返回的XML文件转换为SAP内表. 2创建转换编辑器 事务代码:STRANS 选择简单转换 以图形方式编辑 右键 ...
- uCOS2014.1.9
卢友亮P69 ptcb->OSTCBStat |= OS_STAT_SUSPEND; /*标志任务被挂起*/ 这句是标志人物被挂起成阻塞态的关键. OSTCBStat //任务的当前状态标志 ...
- markdown:列表、表格、代码实现
插入列表 1. dsf2. dsds 插入表格header 1 | header 2---|---row 1 col 1 | row 1 col 2row 2 col 1 | row 2 col 2 ...
- Python脚本:linux上将筛选的文件夹复制到另一个目录,保存目录结构以及文件和文件夹操作方法
import os,shutil def newDir(dir_path): if not os.path.exists(dir_path): os.makedirs(dir_path) def co ...
- C#实现局域网聊天 通讯 Socket TCP 多人
程序分别为服务端与客户端,服务端创建套接字使用多线程侦听多客户端请求 代码需要引用System.Net:和System.Net.Socket:这两个类 分享源码demo:https://pan.bai ...
- 宝塔webHook自动同步代码的使用
#!/bin/bashecho ""#输出当前时间date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"echo " ...
- docker安装之后的配置各种坑
1.docker官网下载安装之后 2.点击 Docker quick start快捷方式 错误提示: windows正在查找bash.exe,也可以手动查找,但是一直找不到. 3.执行 docker- ...