位置: IT常识 - 正文

vue 拖拽(Vue 拖拽排序)

编辑:rootadmin
1、左右容器拖拽 2、容器内位置拖拽切换 3、判断性拖拽(若不适配,鼠标显示禁止拖拽图标) 4、点击大标题,变输入框修改,最后提交表单 <template> <div> <div class="left_list"> <div class="_flex"> <transition-group tag ... 1、左右容器拖拽2、容器内位置拖拽切换3、判断性拖拽(若不适配,鼠标显示禁止拖拽图标)4、点击大标题,变输入框修改,最后提交表单

<template> <div> <div class="left_list"> <div class="_flex"> <transition-group tag="div"> <div class="item list_wrap" :class="'item' + index" v-for="(item, index) in dataList" :key="index" v-if="item.key!='box'" @drop='onDrop($event, item.key)' @dragover.prevent="dragOver($event, item,index)" @dragenter.prevent > <h2 v-on:dblclick="editTitle(index,true)" v-show="!item.showTitleEdit">{{ item.title }}</h2> <Input v-model="item.title" :autofocus="true" :ref="'editInput'+index" v-show="item.showTitleEdit" @on-blur="editTitle(index,false)"/> <p v-if="item.children&&item.children.length>0" v-for="(row,_index) in item.children" :key="_index" draggable="true" @dragstart="handleDragStart($event, item,index,_index)" @dragover.prevent="handleDragOver($event, item,index,_index)" @dragenter="handleDragEnter($event, item,index,_index)" @dragend="handleDragEnd($event, item,index,_index)"> {{ row.lable }} <Icon @click="deleteItem(index,_index)" type="md-close-circle"/> </p> </div> </transition-group> </div> <div class="_flex"> <transition-group tag="div"> <div class="item list_wrap" :class="'item' + index" v-for="(item, index) in dataList" :key="index" v-if="item.key=='box'" @drop='onDrop($event, item.key)' @dragover.prevent="dragOver($event, item,index)" @dragenter.prevent > <h2 v-on:dblclick="editTitle(index,true)" v-show="!item.showTitleEdit">{{ item.title }}</h2> <Input v-model="item.title" :autofocus="true" :ref="'editInput'+index" v-show="item.showTitleEdit" @on-blur="editTitle(index,false)"/> <p v-if="item.children&&item.children.length>0" v-for="(row,_index) in item.children" :key="_index" draggable="true" @dragstart="handleDragStart($event, item,index,_index)" @dragenter="handleDragEnter($event, item,index,_index)" @dragend="handleDragEnd($event, item,index,_index)"> {{ row.lable }} <Icon @click="deleteItem(index,_index)" type="md-close-circle"/> </p> </div> </transition-group> </div> </div> <div class="right_list"> <h1>检测限</h1> <div class="_list" v-for="(item,index) in rightList" :key="index"> <h2>{{ item.title }}</h2> <p v-if="item.children&&item.children.length>0" v-for="(row,_index) in item.children" :key="_index" draggable @dragstart='startDrag($event, item,index,_index)' @dragend="dragEnd($event, item,index,_index)">{{ row.lable }}</p> </div> </div> <Button @click="getD">按钮</Button> </div></template><script>export default { name: 'test2', data () { return { dataList: [ { title: '电源状态', key: 'power', showTitleEdit: false, children: [{lable: '电压(V)'}, {lable: '总电量'}, {lable: '电流(A)'}, {lable: '电压故障次数'}, {lable: '漏电流(mA)'}, {lable: '电流故障次数'}] }, { title: '环境', key: 'surroundings', showTitleEdit: false, children: [{lable: '温度1'}, {lable: '温度2'}, {lable: '湿度'}, {lable: '雷击次数'}] }, { title: 'IO输出', key: 'IOOutput', showTitleEdit: false, children: [{lable: '主继电器'}, {lable: '报警'}, {lable: 'LED'}, {lable: '风扇'}, {lable: '频闪灯'}] }, { title: '箱体布防状态', key: 'box', showTitleEdit: false, children: [{lable: '空开检测'}, {lable: '压敏监测'}, {lable: '门磁监测'}, {lable: '倾斜监测'}, {lable: '水浸监测'}, {lable: '雷击监测'}] } ], rightList: [ { title: 'IO输入', key: 'surroundings', children: [{lable: '电压11111'}, {lable: '总电量1111'}, {lable: '电流111(A)'}, {lable: '电压故障次数1111'}, {lable: '漏电流111(mA)'}, {lable: '电流故障次数111'}] }, { title: '模拟量', key: 'box', children: [{lable: '温度133333'}, {lable: '温度233333'}, {lable: '湿度33333'}, {lable: '雷击次数33333'}] }, { title: '电压值', key: 'power', children: [{lable: '主继电器2222'}, {lable: '报警2222'}, {lable: 'LED222'}, {lable: '风扇2222'}, {lable: '频闪灯222'}] } ], ending: null, dragging: null, newDrag: true, parentDragging: null } }, methods: { // 父拖动 startDrag (event, item, index, _index) { event.dataTransfer.dropEffect = 'move' event.dataTransfer.effectAllowed = 'move' this.newDrag = true this.parentDragging = Object.assign({}, item, {itemIndex: index, rowIndex: _index}) this.dragging = null this.ending = null }, dragOver(event, item, index) { // event.dataTransfer.dropEffect = 'move' if (this.newDrag) { //判断父类移入 event.dataTransfer.dropEffect = this.parentDragging.key == item.key ? 'move' : 'none' } }, dragEnd (event, item, index, _index) { this.newDrag = true }, onDrop (event, list) { if (list == this.parentDragging.key) { for (let item of this.dataList) { if (item.key == this.parentDragging.key) { item.children.push(this.rightList[this.parentDragging.itemIndex].children[this.parentDragging.itemIndex]) break } } } else { if (this.newDrag) { // 不是左边拖动 this.$Message.error('当前key不是同一个') } } }, // 子拖动 handleDragStart (e, item, index, _index) { this.newDrag = false this.parentDragging = null this.dragging = Object.assign({}, item, {index: index, _index: _index}) }, handleDragEnd (e, item) { if (this.ending.key != this.dragging.key) { return } let sourceIndex = this.dragging._index let targetIndex = this.ending._index let parentInex = this.dragging.index this.dataList[parentInex].children[sourceIndex] = this.dataList[parentInex].children.splice(targetIndex, 1, this.dataList[parentInex].children[sourceIndex])[0] }, handleDragOver (e, item, index, _index) { // e.dataTransfer.dropEffect = 'move' //判断子类移入 if (this.dragging) { if (this.ending.key != this.dragging.key) { e.dataTransfer.dropEffect = 'none' } else { e.dataTransfer.dropEffect = 'move' } } }, handleDragEnter (e, item, index, _index) { // 为需要移动的元素设置dragstart事件 e.dataTransfer.effectAllowed = 'move' this.ending = Object.assign({}, item, {index: index, _index: _index}) }, editTitle (index, bool) { this.dataList[index].showTitleEdit = bool this.$nextTick(() => { this.$refs['editInput' + index][0].focus() }) }, deleteItem (index, rowIndex) { this.dataList[index].children.splice(rowIndex, 1) }, getD () { console.log(this.dataList) } }}</script><style scoped lang="less">.right_list, .left_list { width: 49%; padding: 10px; display: inline-block; vertical-align: top; h2 { font-size: 1.5em; margin: 20px 20px 10px; } p { padding: 10px; display: inline-block; width: 48%; text-align: center; cursor: pointer; }}.left_list { background: #bcf5de; ._flex { margin: 10px; display: inline-block; width: 45%; vertical-align: top; } .list_wrap { margin-bottom: 10px; border: 1px solid red; }}.right_list { background: #fdbfab;}</style>

推荐整理分享vue 拖拽(Vue 拖拽排序),希望有所帮助,仅作参考,欢迎阅读内容。

vue 拖拽(Vue 拖拽排序)

文章相关热门搜索词:vue拖拽组件生成前端页面,vue拖拽组件生成前端页面,Vue 拖拽排序,vue拖拽组件,vue 拖拽上传,vue拖拽插件,vue拖拽功能的实现,vue拖拽组件,内容如对您有帮助,希望把文章链接给更多的朋友!

View Code

本文链接地址:https://www.jiuchutong.com/zhishi/310412.html 转载请保留说明!

上一篇:vue3和vue2 的区别,vue3和vu2到底哪个好呢?(vue2跟vue3)

下一篇:爬虫系统研发工程师(爬虫工程师简介)

  • 苹果12如何添加NFC公交卡(苹果12如何添加nfc卡片)

    苹果12如何添加NFC公交卡(苹果12如何添加nfc卡片)

  • 抖音主页访客记录怎么删除一个人(抖音主页访客记录最靠前的人)

    抖音主页访客记录怎么删除一个人(抖音主页访客记录最靠前的人)

  • 微信如何删除聊天记录(微信如何删除聊天记录不能恢复)

    微信如何删除聊天记录(微信如何删除聊天记录不能恢复)

  • 华为手机怎么给联系人设置铃声(华为手机怎么给软件设置密码)

    华为手机怎么给联系人设置铃声(华为手机怎么给软件设置密码)

  • 快手可以帮别人充值吗(快手可以帮别人解封吗)

    快手可以帮别人充值吗(快手可以帮别人解封吗)

  • 微云超级会员有哪些作用(微云超级会员有直升活动吗)

    微云超级会员有哪些作用(微云超级会员有直升活动吗)

  • 魅族16spro屏幕比例(魅族16sp的屏幕怎么样)

    魅族16spro屏幕比例(魅族16sp的屏幕怎么样)

  • 微信查询名下实名账号显示异常(微信查询名下实名账号异常)

    微信查询名下实名账号显示异常(微信查询名下实名账号异常)

  • cd rom又称为什么(cdrom又称为什么)

    cd rom又称为什么(cdrom又称为什么)

  • 华为荣耀20怎么打开人像模式(华为荣耀20怎么隐藏应用)

    华为荣耀20怎么打开人像模式(华为荣耀20怎么隐藏应用)

  • 抖音内测是什么意思(抖音官方账号推荐)

    抖音内测是什么意思(抖音官方账号推荐)

  • 微信视频聊天屏幕延迟是什么原因(微信视频聊天屏幕旋转怎么关闭)

    微信视频聊天屏幕延迟是什么原因(微信视频聊天屏幕旋转怎么关闭)

  • ps白色的参数是多少(ps白色的参数是灰色的)

    ps白色的参数是多少(ps白色的参数是灰色的)

  • 电脑运行内存占用高怎么办(电脑运行内存占用80%)

    电脑运行内存占用高怎么办(电脑运行内存占用80%)

  • OPPO k5有DC调光吗(oppo k5闪光灯怎么开)

    OPPO k5有DC调光吗(oppo k5闪光灯怎么开)

  • a1932苹果是什么型号(苹果a1934是什么版)

    a1932苹果是什么型号(苹果a1934是什么版)

  • red米book14有摄像头吗(redmibook14锐龙版摄像头怎么开)

    red米book14有摄像头吗(redmibook14锐龙版摄像头怎么开)

  • 快手动态可以保留几天(快手动态保持多长时间)

    快手动态可以保留几天(快手动态保持多长时间)

  • vivo手机更改图标外观(vivo手机更改图标大小)

    vivo手机更改图标外观(vivo手机更改图标大小)

  • vivox27支持面部识别吗(vivox27支持脸部解锁吗)

    vivox27支持面部识别吗(vivox27支持脸部解锁吗)

  • 苹果max怎么录屏幕视频(苹果max怎么录屏教程)

    苹果max怎么录屏幕视频(苹果max怎么录屏教程)

  • iponexs和iponexsmax区别(iphpne xsmax)

    iponexs和iponexsmax区别(iphpne xsmax)

  • 电脑怎样进入cmos,设置cmos方法介绍(电脑怎样进入cmos设置)

    电脑怎样进入cmos,设置cmos方法介绍(电脑怎样进入cmos设置)

  • 同步与异步的认识(同步和异步的关系)

    同步与异步的认识(同步和异步的关系)

  • 基于OpenCV的图片和视频人脸识别(基于opencv的图像处理)

    基于OpenCV的图片和视频人脸识别(基于opencv的图像处理)

  • VUE-鼠标悬浮到目标区域变成小手模样(vue 浮动窗口)

    VUE-鼠标悬浮到目标区域变成小手模样(vue 浮动窗口)

  • Vue3 京东到家项目实战第一篇(首页及登录功能开发) 进阶式掌握vue3完整知识体系(京东到家的物流模式)

    Vue3 京东到家项目实战第一篇(首页及登录功能开发) 进阶式掌握vue3完整知识体系(京东到家的物流模式)

  • 个人经营所得税起征点是多少
  • 财务软件属于哪种软件
  • 小规模纳税人加油发票可以抵扣吗
  • 非营利组织注销流程
  • 小规模纳税人给个人怎么开发票
  • 未达起征点附加税还需要扣税嘛
  • 发票该如何打印
  • 工会经费入账
  • 上月发票错误退回怎么做账
  • 红字信息表跨月撤销有什么影响吗
  • 哪些邮政业务可以寄快递
  • 国库存款利息收入计入哪个预算收入科目
  • 委托收款背书和转让背书
  • 公司员工个人所得税
  • 盈余公积可以随便用吗
  • 工程施工什么时候确认收入
  • 购买原材料发生的采购费用计入
  • 固定资产减值账务处理怎么做
  • 前期认证相符且不符合
  • 开启共享文件夹
  • 如何阻止windows10升级到11
  • 增值税发票税率怎么算
  • 社会保险生育险能报多少
  • 上年度多计提的工资
  • cpu资源占用高怎么办
  • 冲减预付款
  • php readdir函数
  • 甲方工程扣款如何处理
  • 期货公司向客户收取的保证金属于谁所有
  • 装修材料如何入账
  • 其他应收款的审计重点不包括哪些
  • thinkphp 模块
  • php常用类
  • php写一个简单的单例模式
  • php类的特性实例是什么
  • 错开、补开发票问题
  • 一般纳税人上月有普通发票收入没入账可以次月加上吗
  • 进料核销应调整哪些项目
  • java一天速成
  • SQL Server 在Management Studio中使用Web浏览器
  • 企业残保金什么情况下可以减免
  • 丢失增值税发票已报税证明单取消
  • 固定资产处置时发生的清理费用
  • 人力资源行业税收优惠
  • 营业成本指的什么
  • 银行手续费发票负数是啥意思
  • 调表不调账都有什么情况
  • 小规模纳税人预交增值税率
  • 金税盘服务费可以退吗
  • 原料到产品
  • 运输费计入什么科目里面
  • 托管服务费开什么发票
  • 甲公司控股乙公司
  • 各单位都需设置的是
  • SQL Server的FileStream和FileTable深入剖析
  • redhat server
  • win8系统打开苹果系统文件
  • Win7系统打开蓝牙
  • win8如何打开设置
  • centos7.6有线连接
  • 对于cookie的描述
  • js正则表达式gi
  • 全志科技在国内芯片界地位
  • 狗刨好学吗
  • nodejs v8
  • linux cz命令
  • js中的$是什么意思
  • angularjs删除数组元素
  • 批处理forfiles
  • js中的常用方法
  • androidstudio的jdk
  • js代码怎么使用
  • js中倒计时器怎么实现
  • javascript原型
  • jquery获取点击元素
  • js判断当前页面是否为空
  • android 界面切换
  • 重庆电子税务局怎么绑定办税人员
  • 利润报表怎么填写
  • 本年累计实际已预缴的所得税额怎么填
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设