位置: 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)

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

  • iwatch7怎么关机(apple watch关机)

    iwatch7怎么关机(apple watch关机)

  • 微信拉黑后对方发信息会显示什么(微信拉黑后对方发好友申请能收到吗)

    微信拉黑后对方发信息会显示什么(微信拉黑后对方发好友申请能收到吗)

  • 笔记本打字为什么不能出现汉字(笔记本打字为什么是数字)

    笔记本打字为什么不能出现汉字(笔记本打字为什么是数字)

  • 电子邮件的工作原理是什么(电子邮件工作在哪一层)

    电子邮件的工作原理是什么(电子邮件工作在哪一层)

  • 笔记本硬盘坏了症状(笔记本硬盘坏了怎么修复)

    笔记本硬盘坏了症状(笔记本硬盘坏了怎么修复)

  • 比心新人首单免费吗(比心首单免费从哪里领取)

    比心新人首单免费吗(比心首单免费从哪里领取)

  • 通用里面没有辅助功能(通用没有辅助功能怎么办)

    通用里面没有辅助功能(通用没有辅助功能怎么办)

  • 在苹果直营店买的好处(在苹果直营店买的手机可以退货吗)

    在苹果直营店买的好处(在苹果直营店买的手机可以退货吗)

  • 闲鱼卖手机发货时注意什么(闲鱼卖手机发货视频怎么拍)

    闲鱼卖手机发货时注意什么(闲鱼卖手机发货视频怎么拍)

  • 华为手机屏幕闪跳(华为手机屏幕闪绿色横纹)

    华为手机屏幕闪跳(华为手机屏幕闪绿色横纹)

  • qq相册怎么弄自己看不见(自己的qq相册怎么设置密码)

    qq相册怎么弄自己看不见(自己的qq相册怎么设置密码)

  • vaio笔记本怎么买不到(vaio笔记本怎么调节亮度)

    vaio笔记本怎么买不到(vaio笔记本怎么调节亮度)

  • 华为p20pro支持内存卡扩展吗(华为p20pro可以用内存卡吗)

    华为p20pro支持内存卡扩展吗(华为p20pro可以用内存卡吗)

  • 笔记本发出滋滋声音(笔记本发出滋滋滋的声音然后死机)

    笔记本发出滋滋声音(笔记本发出滋滋滋的声音然后死机)

  • 趣分类怎么注销实名(趣分类怎么注销账号)

    趣分类怎么注销实名(趣分类怎么注销账号)

  • 嘀嗒出行发票怎么开(嘀嗒出行开具发票)

    嘀嗒出行发票怎么开(嘀嗒出行开具发票)

  • 华为屏保新闻怎么关闭(华为手机新闻屏保怎么关闭)

    华为屏保新闻怎么关闭(华为手机新闻屏保怎么关闭)

  • 荣耀4手环能接电话吗(荣耀4手环能接打电话吗)

    荣耀4手环能接电话吗(荣耀4手环能接打电话吗)

  • 滴滴多久不接单会封号(滴滴多久不接单恢复新手保护期)

    滴滴多久不接单会封号(滴滴多久不接单恢复新手保护期)

  • 快手id怎么查找(快手id怎么查找别人身份信息)

    快手id怎么查找(快手id怎么查找别人身份信息)

  • p20pro和p30pro区别(p20pro和p30哪个性价比高)

    p20pro和p30pro区别(p20pro和p30哪个性价比高)

  • y97指纹锁在哪里(指纹锁在哪里打开)

    y97指纹锁在哪里(指纹锁在哪里打开)

  • iphone保存的视频在哪(iPhone保存的视频怎么慢放)

    iphone保存的视频在哪(iPhone保存的视频怎么慢放)

  • p30pro长宽多少(p30pro 长宽)

    p30pro长宽多少(p30pro 长宽)

  • qq那个耳朵是什么(qq上面的那个耳朵是什么意思)

    qq那个耳朵是什么(qq上面的那个耳朵是什么意思)

  • 金税三期反映出来的是前几年的问题
  • 个人出租如何交税
  • 专项应付款怎核算?
  • 法人和办税人
  • 公司股东分红要交哪些税
  • 个税填报后怎么撤销申报
  • 全额工资是到手工资吗
  • 小规模纳税人申请电子发票流程
  • 建筑安装工程怎么缴税
  • 产品成本核算过程
  • 以现金形式发工资的说明范文
  • 以前年度费用未入账税务处理
  • 银行利息收入可以开增值税专用发票
  • 互联网合同范本
  • 国税退税需要多长时间
  • 在线负利计算器
  • 车辆购置税是否计入固定资产
  • 公司员工体检计入什么科目
  • 建筑业3%人工费可以开专票吗?
  • 税控盘怎么进行升级
  • 社保稳岗补贴可以申请几次
  • 向客户的续期相关通知
  • 权益净利率计算公式推导
  • 无形资产摊余价值不含减值
  • 工程结算属于哪个类别
  • 增加住房收入
  • 分期收款什么是分期还款
  • 公司账务审计费用取费标准
  • 企业开发产品转为自用的,不得在税前扣除折旧费用
  • 购物卡怎么给
  • 无损数据分区
  • 即征即退,先征后退,先征后返的区别?
  • 下岗职工生活费最多发多少个月
  • vue 右键菜单
  • 非货币性资产投资特殊性税务处理
  • php sendmail
  • laravel注入
  • json字符串转json js
  • 有关的拼音
  • 银行代发工资会扣个人所得税吗
  • 微擎框架安装教程
  • 增票的纳税人识别号是啥
  • 公司缴个人所得税吗
  • 购买垃圾桶计入什么科目
  • 纳税人兼营不同税率
  • 跨年的房租费用怎么做账
  • 房产税的纳税人包括
  • 联通里的话费可以拿来干嘛
  • 一般纳税人购进免税农产品如何抵扣进项税额
  • 食堂的帐怎么做
  • 实际收到货款分录
  • 销售商品的运费的税费计入进项税额
  • 应交税费应交增值税进项税额在借方
  • 验资账户需要对账吗
  • 本月多交的增值税
  • 应收账款转营业外支出
  • 汽车折旧年限及残值率是多少
  • 税控盘清卡时间
  • 工资流水贷款需要什么手续
  • 银行信贷人员岗位职责
  • sql server 错误
  • sql server 2005如何使用
  • 自动化生产线模型
  • 收集整理的近义词
  • crossfire.exe是什么
  • a4腰多大
  • centos zsh
  • schupd.exe - schupd是什么进程 有什么用
  • linux里chmod用法
  • textureformat
  • linux7 snmp
  • 怎么在html中调用js的函数
  • 简单谈谈你对公安工作的认识
  • jquery鼠标点击事件怎么写
  • js canvas绘制图片
  • java script
  • 河南电子税务局开票流程
  • 落实落地是什么意思
  • 补充耕地指标费用能从储备中心支付吗
  • 内蒙地税个人所得税标准
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设