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

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

  • 细节设计上把握用户的从众心理,往往能收到意想之外的收获。(细节设计的重要性)

    细节设计上把握用户的从众心理,往往能收到意想之外的收获。(细节设计的重要性)

  • 苹果13promax隐藏相册怎么弄出来(苹果13promax隐藏相册怎么加密)

    苹果13promax隐藏相册怎么弄出来(苹果13promax隐藏相册怎么加密)

  • 哔哩哔哩电视版叫什么(哔哩哔哩电视版怎么搜索up主)

    哔哩哔哩电视版叫什么(哔哩哔哩电视版怎么搜索up主)

  • 苹果8p怎么双击截屏(苹果8p怎么双击点亮)

    苹果8p怎么双击截屏(苹果8p怎么双击点亮)

  • jdn2-w09是什么型号(jdn2-w09是什么型号几寸)

    jdn2-w09是什么型号(jdn2-w09是什么型号几寸)

  • 抖音上的红色加号是什么意思(抖音上的红色加号怎么弄上去的)

    抖音上的红色加号是什么意思(抖音上的红色加号怎么弄上去的)

  • 微信朋友圈怎么修改已经发布的内容(微信朋友圈怎么置顶)

    微信朋友圈怎么修改已经发布的内容(微信朋友圈怎么置顶)

  • m1903f2a是什么型号(m1903f10g是什么型号)

    m1903f2a是什么型号(m1903f10g是什么型号)

  • 美图秀秀不发布就不能保存吗(美图秀秀 发布)

    美图秀秀不发布就不能保存吗(美图秀秀 发布)

  • 华为jkmtl00型号是啥(华为jkmtl00型号手机照片删除后找回)

    华为jkmtl00型号是啥(华为jkmtl00型号手机照片删除后找回)

  • vivo手机如何剪辑视频(vivo手机如何剪辑铃声)

    vivo手机如何剪辑视频(vivo手机如何剪辑铃声)

  • 手机耳机只有一边有声音怎么解决(手机耳机只有一只能听了怎么办)

    手机耳机只有一边有声音怎么解决(手机耳机只有一只能听了怎么办)

  • 怎么登支付宝扫脸登录(支付宝怎么扫码登录)

    怎么登支付宝扫脸登录(支付宝怎么扫码登录)

  • 快手怎么搜索别人直播(快手怎么搜索别人ID)

    快手怎么搜索别人直播(快手怎么搜索别人ID)

  • 淘宝如何刷新当前页面(淘宝怎么样刷新)

    淘宝如何刷新当前页面(淘宝怎么样刷新)

  • mt712ch/a是什么版(MT712CHA是什么版本)

    mt712ch/a是什么版(MT712CHA是什么版本)

  • svoice是什么意思(svon什么意思)

    svoice是什么意思(svon什么意思)

  • 大疆御1和2区别(大疆御1和2参数对比)

    大疆御1和2区别(大疆御1和2参数对比)

  • 小米9se尺寸长宽高(小米9se 尺寸)

    小米9se尺寸长宽高(小米9se 尺寸)

  • 闲鱼账号密码忘记怎么找回(闲鱼账号密码忘记了怎么找回图片解释)

    闲鱼账号密码忘记怎么找回(闲鱼账号密码忘记了怎么找回图片解释)

  • 抖音怎么编辑文字(抖音怎么编辑文字配音)

    抖音怎么编辑文字(抖音怎么编辑文字配音)

  • 拼多多的多多进宝是什么(拼多多的多多进宝是怎么操作的)

    拼多多的多多进宝是什么(拼多多的多多进宝是怎么操作的)

  • 野生动物保护区中的沙丘鹤和野鸭,美国新墨西哥州 (© Cathy & Gordon Illg/Jaynes Gallery/DanitaDelimont.com)(野生动物保护区有哪些)

    野生动物保护区中的沙丘鹤和野鸭,美国新墨西哥州 (© Cathy & Gordon Illg/Jaynes Gallery/DanitaDelimont.com)(野生动物保护区有哪些)

  • 【图像分割】Meta分割一切(SAM)模型环境配置和使用教程(图像分割最新算法)

    【图像分割】Meta分割一切(SAM)模型环境配置和使用教程(图像分割最新算法)

  • 非税收入票据能否税前扣除
  • 小企业外币交易的类型有哪些
  • 原材料不良品的处理流程
  • 差旅费津贴需要缴纳个人所得税吗?
  • 认证不过的进项税调出分录
  • 应付余额是负数怎么理解
  • 开具了红字发票信息表的税额需要转出吗
  • 带薪缺勤会计处理
  • 小规模纳税人开专票税率是1%还是3%
  • 公司为员工租房费用的会计分录
  • 电影院买电影票怎么买
  • 事业单位已核销怎么处理
  • 无发生额有没有对账单
  • 年终奖第二年才发怎么计算个税在个税app
  • 税费种认定功能在哪里
  • 代扣代缴个人所得税手续费是否缴纳增值税
  • 消费税的征税范围有哪些?
  • 应收股利属于其他业务吗
  • 实收资本的期初余额在借方还是贷方
  • 公司会议案例
  • 报销招待费的会计怎么做
  • 小规模纳税人纳税期限
  • 水利建设基金是税还是费
  • php的file函数
  • 喀拉拉邦地理位置
  • cortana小娜可以卸载吗
  • win10右键没有新建excel和word
  • php数组函数题目
  • 用彩泥可以做什么食物?
  • 设备租赁费属于劳务吗
  • 长期借款科目的期末余额反映尚未偿还的借款本金
  • zend framework手册
  • CNN+LSTM+Attention实现时间序列预测(PyTorch版)
  • 应付职工薪酬会产生暂时性差异吗
  • thinkphp自定义标签page
  • 猿类作文
  • php改html
  • 收到劳务派遣发票可以抵扣吗
  • 以前年度收入少计如何做帐
  • 工会经费是什么凭证
  • 新会计准则规定
  • mysql外键约束的基本语法结构
  • python __call__
  • phpcms怎么修改模板风格
  • 小规模纳税人收入超过500万怎么办
  • 对外捐赠固定资产会影响利润总额吗
  • 建安类企业包括哪些公司
  • 内资企业如何进国企
  • 下列项目的进项税额可以从销售税额中抵扣的是
  • 出口资质证书
  • 申报错误后处理有影响吗
  • 电商商品采购流程
  • 银行承兑到期之前怎么办
  • 广告设计合同属于什么合同
  • 车辆保险费算什么费用
  • 劳务分包需要什么条件
  • 货物发生退运了怎么办
  • 集团内部资产无偿划转是否缴纳印花税
  • 应付款多付了怎么入账
  • 利润表季度表怎么填
  • 彻底删除sql server2019
  • win8.1 升级
  • centos sh
  • win8如何添加我的电脑
  • windows10x预览版
  • win81和win10
  • win8.1无法安装vmware tools
  • nodejs oom
  • Node.js中的包管理工具是什么
  • 用bat打开cmd执行命令
  • jquery并列选择器
  • android判断应用是否在前台
  • mixed模型
  • 个人所得税对什么征税
  • 国税系统三方协议
  • 浙江国税网上报税
  • 青岛网上申请个体工商户
  • 如何查询医院是否有怀孕建档名额
  • 委托贷款的手续费
  • 商住两用房出售要交契税吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设