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

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

  • 苹果13口罩解锁怎么设置(苹果13口罩解锁需要什么版本)

    苹果13口罩解锁怎么设置(苹果13口罩解锁需要什么版本)

  • 微信怎么置顶公众号(微信上怎么置顶公众号)

    微信怎么置顶公众号(微信上怎么置顶公众号)

  • 苹果xsmax强制重启(苹果xsmax强制重启怎么弄)

    苹果xsmax强制重启(苹果xsmax强制重启怎么弄)

  • ios13升级苹果7p会卡吗(苹果7p升级13.3)

    ios13升级苹果7p会卡吗(苹果7p升级13.3)

  • 电脑管家跑分多少算好

    电脑管家跑分多少算好

  • 微信无缘无故被注销了怎么办(微信无缘无故被投诉了、是怎么回事)

    微信无缘无故被注销了怎么办(微信无缘无故被投诉了、是怎么回事)

  • 电脑文件怎么重命名(电脑文件怎么重命名后缀)

    电脑文件怎么重命名(电脑文件怎么重命名后缀)

  • dns搜索区域填什么(dnspy搜索)

    dns搜索区域填什么(dnspy搜索)

  • 后压屏鉴别方法(后压屏怎么鉴别)

    后压屏鉴别方法(后压屏怎么鉴别)

  • 输入当天日期应按什么(输入当天日期应按( ))

    输入当天日期应按什么(输入当天日期应按( ))

  • 官换机是翻新机吗(官换机是翻新机器吗?)

    官换机是翻新机吗(官换机是翻新机器吗?)

  • 手机一拨号就挂断是什么原因(手机一拨号就挂断是咋回事苹果)

    手机一拨号就挂断是什么原因(手机一拨号就挂断是咋回事苹果)

  • a12和a10差距大吗(a12跟a10区别)

    a12和a10差距大吗(a12跟a10区别)

  • 电脑快捷重启按什么键(电脑快捷重启按哪个键)

    电脑快捷重启按什么键(电脑快捷重启按哪个键)

  • soul一般禁言多久(soul禁言是什么情况)

    soul一般禁言多久(soul禁言是什么情况)

  • 显卡驱动要装c盘吗(显卡驱动要装在哪个盘)

    显卡驱动要装c盘吗(显卡驱动要装在哪个盘)

  • 对方振铃是不是拉黑了(对方振铃是不是把手机调成震动了?)

    对方振铃是不是拉黑了(对方振铃是不是把手机调成震动了?)

  • qq可以加多少好友(qq加多少好友会被冻结)

    qq可以加多少好友(qq加多少好友会被冻结)

  • 腾讯视频怎么没有广告(腾讯视频怎么没有声音)

    腾讯视频怎么没有广告(腾讯视频怎么没有声音)

  • iphonexr防水防尘吗(iphonexr防水防尘级别)

    iphonexr防水防尘吗(iphonexr防水防尘级别)

  • a1938苹果耳机几代(a1938苹果耳机几代多少钱)

    a1938苹果耳机几代(a1938苹果耳机几代多少钱)

  • 百视通怎么投屏

    百视通怎么投屏

  • u盘被洗衣机搅后还能用么(优盘被洗衣机洗了里面东西都没有了)

    u盘被洗衣机搅后还能用么(优盘被洗衣机洗了里面东西都没有了)

  • 如何排除搜索特定文件保隐私安全(搜索特定)

    如何排除搜索特定文件保隐私安全(搜索特定)

  • 鸿蒙工具箱打开位置(鸿蒙实用工具在哪里)

    鸿蒙工具箱打开位置(鸿蒙实用工具在哪里)

  • mac os x10.10wifi连接特别慢几分钟后自自行断开(macwifi配置)

    mac os x10.10wifi连接特别慢几分钟后自自行断开(macwifi配置)

  • groupadd命令  创建新的用户组(使用groupadd命令创建用户组)

    groupadd命令 创建新的用户组(使用groupadd命令创建用户组)

  • 私人大额转账要到柜台办理吗
  • 税收契子怎么算
  • 足浴行业是否需要缴纳文化事业建设税
  • 售后维修的配件有哪些
  • 会计信息不采集,证书会失效吗
  • 应收款项出售的分录怎么处理
  • 个人经营贷款利率是多少
  • 冲减应收帐款分录
  • 去年房租忘记摊销怎么办
  • 母公司收购少数股东股权,之前的利润母公司不享有
  • 机械设备租赁征求意见稿
  • 代扣代缴税种有几个
  • 行政事业单位2014年前已交社保费
  • 机器设备的拆除方法
  • 本单位员工投稿怎么写
  • 电费冲销是什么意思
  • 公司为员工交的五险一金到底是怎么回事
  • 公司缴纳的社保离职后自己可以缴纳社保
  • 酒店长包房正常打几折
  • 安装设备领用原材料应该用成本还是公允
  • 房地产销售佣金表格模板
  • 工程出差主要是做什么
  • mac电脑command键快捷设置
  • 单位开具发票
  • 不良资产购买流程
  • 股权转让有哪些股
  • php伪静态规则写法
  • php的session
  • Vue vue.config.js 的详解与配置
  • php面向对象的三大特征
  • 工商年报中营业费用包括
  • php 文件上传类型限制
  • 建行e信通怎么转让
  • vue的mvvm模型
  • 百度地图定位不更新
  • 装修费摊销会计准则
  • 因质量问题对方直接扣款怎么处理
  • 运输发票的抵扣期限
  • 印花税计提分录怎么写
  • 阴影等级是什么
  • 总公司签合同开票分公司做业务分公司如何确认收入?
  • 税负率过低犯法吗
  • 长期股权投资成本法会计处理
  • 利润总额包括的内容主要有
  • 报税合同
  • 企业汇算清缴的工资薪金支出是怎么填
  • 应收利息科目的表述
  • 公账转法人私账用途写备用金可以吗
  • 关联交易现金流
  • 企业所得税留抵税额
  • 农副食品发票
  • 收到商业承兑汇票的会计分录
  • 未开票收入下月开票会计分录
  • 将外购商品用于赠送客户
  • 《新会计准则》
  • a公司刚刚执行了一个采购项目
  • 计提应付账款会计分录
  • 固定资产的建造成本怎么计算
  • 海关发票丢失怎么处理
  • sqlserver存储过程返回多个结果集
  • win7命令提示符怎么打开
  • xp系统被锁定怎么解除锁定
  • win10命令提示符哪里打开
  • mac修改dns设置
  • window10的微软商店在哪
  • linux如何使用uname命令
  • cocos2dx运行原理
  • jquery怎么写
  • android images
  • perl use cwd
  • js插件写法
  • 将txt文件名批量导入excel
  • android解析
  • jquery滚动到底部加载数据
  • unity持久化存储
  • js拖拽div
  • python编程简单案例
  • 郑东新区社保局电话号码是多少
  • 出口备案单证管理办法
  • 航天金穗280怎么入账
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设