先上一张效果图,然后再上代码(由于只做效果,未做数据相关的处理:实际处理数据时不修改 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 不引用第三方包的情况下实现嵌套对象的拖拽排序功能的更多相关文章

  1. vue2.0学习笔记之路由(二)路由嵌套+动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. vue2.0学习笔记之路由(二)路由嵌套

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. docker并不能把部署的工作「减少为0」,比较好的情况下是「基本减少为1」

    很多人说docker改变了运维世界,这句话是从群体角度来说的,是统计学意义上的改变,像mysql,python这样被大规模使用的基础应用,docker化之后为整个群体所节省的时间是非常巨大的. 有人可 ...

  4. java 哪些情况下会使对象锁释放

    Java_多线程_锁释放 问:Java多线程运行环境中,在哪些情况下会使对象锁释放?答:由于等待一个锁的线程只有在获得这把锁之后,才能恢复运行,所以让持有锁的线程在不再需要锁的时候及时释放锁是很重要的 ...

  5. golang引用第三方包的报错:no required module provides package [完美解决]

    关于golang第三方包的引用报错:no required module provides package : go.mod file not found in current directory o ...

  6. 如何在不使用系统函数的情况下实现PHP中数组系统函数的功能

    PHP中为我们提供了各种各样的系统函数来实现我们需要的各种功能,那么,在不使用系统函数的情况下我们要怎样来实现这些功能呢?以下就是几种系统函数的实现方式. 首先,我们来定义一个数组: $arr= ar ...

  7. 在vue2.0中引用element-ui组件库

    element-ui是由饿了么团队开发的一套基于 Vue 2.0 的桌面端组件库. 官网:http://element.eleme.io/ 安装 npm i element-ui -S 引用完整的el ...

  8. Xamarin引用第三方包错误解决方法

    http://www.cnblogs.com/ThenDog/p/7623720.html

  9. 自定义ListView适配器Adapter引用布局文件的情况下实现点击列表项时背景颜色为灰色

    listview控件设置适配器的时候,如果使用自定义的adapter,比如MyArrayAdapter extends ArrayAdapter<String> 如果listitem布局文 ...

随机推荐

  1. dup的使用

    转自:http://www.cnblogs.com/GODYCA/archive/2013/01/05/2846197.html 下面是关于实现重定向的函数dup和dup2的解释: 系统调用dup和d ...

  2. PHP:第三章——PHP中返回引用的函数

    <?php header("Content-Type:text/html;charset=utf-8"); $i=1; function &F(){ global $ ...

  3. httpclient 相关使用介绍

    httpclient中sessionId的获取与设置 public class HttpSessionId { public static void main(String[] args) throw ...

  4. pywin32 的安装

    这个东西不是在包管理器安装一下就可以的. https://github.com/mhammond/pywin32/releases 请到git下载exe安装文件.

  5. windows内存体系结构 内存查询,读,写(附录源码)

    “进程内存管理器”这个程序实现的最基本功能也就是对内存的读写,之前的两篇文章也就是做的一个铺垫,介绍了内核模式切换和IoDeviceControl函数进行的应用程序与驱动程序通信的问题.接下来就进入正 ...

  6. 【DevExpress v17.2新功能预告】DevExpress ASP.NET Scheduler新的自适应功能

    自适应Web设计可以帮助您解决各种尺寸的屏幕问题,网站的自适应网页设计可帮助您解决用户使用不同大小屏幕显示数据的问题. 在v17.2中,我们最大化了ASP.NET Scheduler的视图和可视化元素 ...

  7. tomcat的简单配置与适用默认的web应用

    指定tomcat端口: server.xml: <Connector port="8080" protocol="HTTP/1.1" connection ...

  8. ESXi6.5中将虚拟机从厚置备转换为精简置备

    本文来自:https://blog.csdn.net/wangjingkaibear/article/details/77097041 用ESXi做虚拟化,创建了一个原始虚拟机并安装好系统做好基本设置 ...

  9. docker中的安全机制

    有时候我们需要容器具有更多的权限,像如操作内核模块,控制swap交换分区,挂载usb磁盘,修改mac地址等.所以我们今天进行docker的安全设定. 一.使用docker命令设置docker的安全机制 ...

  10. 移动端 解决自适应 和 多种dpr (device pixel ratio) 的 [淘宝] 解决方案 lib-flexible

    其实H5适配的方案有很多种,网上有关于这方面的教程也非常的多. 不管哪种方法,都有其自己的优势和劣势. 为什么推荐使用Flexible库来做H5页面的终端设备适配呢?   原理  简单易懂  源码疑问 ...