vue2.0 不引用第三方包的情况下实现嵌套对象的拖拽排序功能
先上一张效果图,然后再上代码(由于只做效果,未做数据相关的处理:实际处理数据时不修改 dom 元素,只是利用 dom 元素传递数据,然后需改数据,靠数据驱动效果)
<div :id="index+'_morning'" style="min-height: 20px;" @drop='drop($event)' @dragover='allowDrop($event)'>
<li style="padding:0 0 5px 0">
<span class="type-icon time">上</span>上午(morning)
</li>
<template v-if="item.morning !== undefined">
<template v-for="(itemSon,idIdx) in item.morning">
<li class="item ui-sortable-handle" :id="index+'_morning_'+idIdx" draggable='true' @dragstart='drag($event)' @drop='drop($event)' @dragover='allowDrop($event)'>
<span class="destination-name">
<em class="ball ball-red">{{itemSon.node_sort}}</em>
<a href="javascript:;" class="item-name">{{itemSon.name}}</a>
<NodeSetMore @click="onEventPoi(itemSon)" :poi="itemSon" v-on:poiOperate="onPoiOperate"></NodeSetMore>
<DisplayIcon :poi="itemSon"></DisplayIcon>
</span>
</li>
</template>
</template>
</div>
methods: {
// 拖拽相关
drag:function(event){
console.log('拖动事件', event)
this.dom = event.currentTarget
},
drop:function(event){
event.preventDefault();
// 组织事件的传播(防止冒泡,节点向节点容器冒泡,因为都监听了此事件)
event.cancelBubble = true;
console.log('源对比', event.target, event.currentTarget)
console.log('目标id', event.currentTarget.id)
// 为event.currentTarget(点击事件本身)
// 分割id 2_morning格式为容器;2_morning_0为容器下的节点:
const idPath = event.currentTarget.id.split('_');
if (idPath.length === 2) {
event.currentTarget.appendChild(this.dom);
} else if(idPath.length === 3) {
// 获取当前排序第几,然后插在这个元素之后
event.currentTarget.parentNode.appendChild(this.dom);
// 重新改变顺序data中的数组顺序
this.againSort()
} else {
console.log("暂不处理", event.target)
}
//// 数据处理阶段,如果是节点容器,直接插在最前面,如果是节点,则放在这个节点后面
// // 不改变dom节点,直接改变数据
// this.tripList['1']['morning'].splice(0, 1);
// this.againSort()
},
allowDrop:function(event){
event.preventDefault();
// 组织事件的传播
event.cancelBubble = true;
}
}
主要关注点在于 event.target 和 event.currentTarget 的理解,一个是事件触发时点击的元素(如:span),一个是事件触发时点击绑定事件的元素(如:li @drop)
vue2.0 不引用第三方包的情况下实现嵌套对象的拖拽排序功能的更多相关文章
- vue2.0学习笔记之路由(二)路由嵌套+动画
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue2.0学习笔记之路由(二)路由嵌套
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- docker并不能把部署的工作「减少为0」,比较好的情况下是「基本减少为1」
很多人说docker改变了运维世界,这句话是从群体角度来说的,是统计学意义上的改变,像mysql,python这样被大规模使用的基础应用,docker化之后为整个群体所节省的时间是非常巨大的. 有人可 ...
- java 哪些情况下会使对象锁释放
Java_多线程_锁释放 问:Java多线程运行环境中,在哪些情况下会使对象锁释放?答:由于等待一个锁的线程只有在获得这把锁之后,才能恢复运行,所以让持有锁的线程在不再需要锁的时候及时释放锁是很重要的 ...
- golang引用第三方包的报错:no required module provides package [完美解决]
关于golang第三方包的引用报错:no required module provides package : go.mod file not found in current directory o ...
- 如何在不使用系统函数的情况下实现PHP中数组系统函数的功能
PHP中为我们提供了各种各样的系统函数来实现我们需要的各种功能,那么,在不使用系统函数的情况下我们要怎样来实现这些功能呢?以下就是几种系统函数的实现方式. 首先,我们来定义一个数组: $arr= ar ...
- 在vue2.0中引用element-ui组件库
element-ui是由饿了么团队开发的一套基于 Vue 2.0 的桌面端组件库. 官网:http://element.eleme.io/ 安装 npm i element-ui -S 引用完整的el ...
- Xamarin引用第三方包错误解决方法
http://www.cnblogs.com/ThenDog/p/7623720.html
- 自定义ListView适配器Adapter引用布局文件的情况下实现点击列表项时背景颜色为灰色
listview控件设置适配器的时候,如果使用自定义的adapter,比如MyArrayAdapter extends ArrayAdapter<String> 如果listitem布局文 ...
随机推荐
- Mac安装fish shell
1.brew update 2.brew install fish 3.sudo vi /etc/shells 增加内容:/usr/local/bin/fish ##增加fish到shell环境变 ...
- 华为root手机
- 快速切题 sgu120. Archipelago 计算几何
120. Archipelago time limit per test: 0.25 sec. memory limit per test: 4096 KB Archipelago Ber-Islan ...
- kettle使用命令行来运行ktr和kjb
1:cmd方式运行 1.ktr的运行:运行transformation文件是通过Pan.bat来运行的. 打开cmd命令行窗口,转到Pan.bat所在的目录,如d:\data-integration, ...
- bzoj3332
题解: 首先只有存在的路有可能有值 然后在存储矩阵的同时对于本来就有边的情况直接存下来这条边的值 然后跑一次最大生成树 在最大生成树的同时就可以求出矩阵的信息. 代码: #include<bit ...
- Oracle 11g新特性 Interval Partition
分区(Partition)一直是Oracle数据库引以为傲的一项技术,正是分区的存在让Oracle高效的处理海量数据成为可能,在Oracle 11g中,分区技术在易用性和可扩展性上再次得到了增强.在1 ...
- DevExpress v18.1新版亮点——WinForms篇(七)
用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WinForms v18.1 的新功能,快来下载试用新版本! ...
- DevExpress v17.2新版亮点—ASP.NET篇(一)
用户界面套包DevExpress v17.2终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress ASP.NET v17.2 的GridView Control. ...
- 20165210 Java第四周学习总结
20165210 Java第四周学习总结 教材学习内容 第五章学习总结 子类与父类: 子类: class 子类名 extends 父类名 { ... } 类的树形结构 子类的继承性: 子类和父类在同一 ...
- addslash()
php addslashes函数的作用是在预定义的字符前面加上反斜杠,这些预定义字符包括: 单引号(') 双引号(") 反斜杠(\) NULL addslashes函数经常使用在向数据库插入 ...