电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Vue使用vue-draggable 插件在不同列表之間拖拽功能

瀏覽:47日期:2023-01-31 17:02:19

今天分享一個(gè)vue項(xiàng)目中在不同列表拖拽設(shè)置選項(xiàng)的功能,這個(gè)功能也是在做項(xiàng)目中遇到的,先說(shuō)下這個(gè)功能的要點(diǎn)(參考下圖),有2個(gè)列表,左側(cè)列表展示已選,右側(cè)列表展示未選,通過(guò)拖拽進(jìn)行設(shè)置,已選的選項(xiàng)不能超過(guò)4個(gè),超過(guò)的話自動(dòng)將拖拽之前的最后一項(xiàng)清除到右側(cè),且如果從已選往未選里拖的時(shí)候,右側(cè)顯示垃圾桶的提示(如圖)。

拖拽功能圖片:

Vue使用vue-draggable 插件在不同列表之間拖拽功能

垃圾桶顯示圖:

Vue使用vue-draggable 插件在不同列表之間拖拽功能

首先講講vue-draggable的使用

安裝vue-draggable:

npm install vuedraggable

在使用插件的組件內(nèi)引入vue-draggable并注冊(cè)組件:

import draggable from 'vuedraggable'components: { draggable}

然后在我們需要拖拽的列表中使用:

<draggable tag='ul' v-model='selectedTheme' v-bind='dragOptions' :move='onMove' @end='onEnd' > <li v-for='item in selectedTheme' :key='item.type' >{{item.name}}</li></draggable>

下面是拖拽功能組件的完整代碼:

<template> <div class='theme-setting'> <el-dialog :visible.sync='dialogVisible' :close-on-click-modal='false' > <div class='theme-left'> <dl class='theme-title'> <dt class='title'>當(dāng)前選項(xiàng)</dt> <dd class='des'>從右側(cè)拖拽添加</dd> </dl> <draggable tag='ul' v-model='selectedTheme' v-bind='dragOptions' :move='onMove' @end='onEnd' > <li v-for='item in selectedTheme' :key='item.type' >{{item.name}}</li> </draggable> </div> <div class='theme-right'> <h3 class='theme-right-title'>全部選項(xiàng)</h3> <draggable tag='ul' v-model='unSelectTheme' v-bind='dragOptions' :move='onMove' @end='onEnd'> <li v-for='item in unSelectTheme' :key='item.type' >{{item.name}}</li> </draggable> </div> <div v-show='isShowDel'> <img src='http://www.hdgsjgj.cn/assets/imgs/drapDrop/drag_drop_del.png' alt=''> </div> <span slot='footer' class='dialog-footer'> <el-button @click='restoreDefault'>恢復(fù)默認(rèn)設(shè)置</el-button> <el-button type='primary' @click='saveThemeSet'>保存</el-button> </span> </el-dialog> </div></template><script>import {Message} from ’element-ui’import draggable from 'vuedraggable' export default { name: ’DragDrop’, components: { draggable }, data() { return { dialogVisible: false, selectedTheme: [{ type: 1, name: ’選項(xiàng)1’ }, { type: 2, name: ’選項(xiàng)2’ }, { type: 3, name: ’選項(xiàng)3’ }, { type: 4, name: ’選項(xiàng)4’ }], // 已選主題列表 unSelectTheme: [{ type: 5, name: ’選項(xiàng)5’ }, { type: 6, name: ’選項(xiàng)6’ }], // 未選主題列表 backSelectedTheme: [], // 選主題列表備份 backUnSelectTheme: [], // 未選主題列表備份用于恢復(fù)默認(rèn)設(shè)置 relatedListLast: {}, // 已選主題列表最后一項(xiàng) isShowDel: false } }, methods: { showDrag() { this.dialogVisible = true }, onMove({ relatedContext, draggedContext, to }) { const relatedElement = relatedContext.element const draggedElement = draggedContext.element let dragInEl = to[’className’] if (dragInEl == ’selected-list’) { this.isShowDel = false if (this.selectedTheme.length === 4) { // 判斷往已選列表拖時(shí),如果已經(jīng)滿足4項(xiàng),則記錄已選列表的最后一項(xiàng) // 拖拽結(jié)束時(shí)將此項(xiàng)清除到未選列表中 this.relatedListLast = this.selectedTheme[this.selectedTheme.length-1] } } else { this.isShowDel = true // 判斷如果是往未選列表里拖的話顯示垃圾桶 } return ( (!relatedElement || !relatedElement.fixed) && !draggedElement.fixed ) }, onEnd(dragObj) { let dragInEl = dragObj.to[’className’] if (dragInEl == ’selected-list’) { if (this.selectedTheme.length > 4) { // 判斷已選列表大于4項(xiàng),將記錄的最后一項(xiàng)過(guò)濾出來(lái),并push到未選列表數(shù)組 this.selectedTheme = this.selectedTheme.filter(item => { return item.type != this.relatedListLast.type }) this.unSelectTheme.push(this.relatedListLast) } } if (dragInEl === ’theme-right-list’) { // 判斷是往未選列表拖時(shí),拖拽結(jié)束時(shí)將垃圾桶隱藏 this.isShowDel = false } }, // 保存設(shè)置 saveThemeSet() { const params = { taskTopicList: this.selectedTheme } if (this.selectedTheme.length !== 4) { Message({ type: ’error’, message: ’需設(shè)置4個(gè)選項(xiàng) !’ }) return false } $ajax.save(params).then(data => { this.dialogVisible = false Message({ type: ’success’, message: ’保存成功!’ }) this.$parent.refresh() }).catch(err => { console.log(err) }) }, // 恢復(fù)默認(rèn)設(shè)置 restoreDefault() { this.selectedTheme = this.backSelectedTheme this.unSelectTheme = this.backUnSelectTheme } }, computed: { dragOptions() { return { animation: 0, group: 'description', disabled: false, ghostClass: 'ghost' } } } };</script><style lang='less' scoped>body, ul, dl, dt, dd, li, h1, h3{ margin: 0; padding: 0;}ul, ol, li { list-style: none;}.theme-setting { /deep/.el-dialog { height: 476px; border-radius: 6px; .el-dialog__header { height: 55px; line-height: 56px; padding: 0; border-bottom: 1px solid rgba(13,20,30, 0.1); .el-dialog__title { height:21px; font-size:16px; font-family:MicrosoftYaHei-Bold,MicrosoftYaHei; font-weight:bold; color:rgba(13,20,30,1); line-height:21px; } .el-dialog__headerbtn { margin-top: -4px; } } .el-dialog__body { position: relative; display: flex; height: 331px; padding: 0; border-bottom: 1px solid rgba(13,20,30, 0.1); .theme-left { width: 218px; margin-left: 24px; border-right: 1px solid rgba(13,20,30, 0.1); .theme-title { display: flex; margin-top: 24px; .title { height:19px; margin-right: 4px; font-size:14px; font-family:MicrosoftYaHei-Bold,MicrosoftYaHei; font-weight:bold; color:rgba(13,20,30,1); line-height:19px; } .des { height:16px; font-size:12px; font-family:MicrosoftYaHei; color:rgba(13,20,30,0.6); line-height:19px; } } .selected-list { height: 240px; margin-top: 24px; overflow: hidden; .selected-theme { width:160px; height:48px; line-height:48px; text-align: center; margin-bottom: 16px; cursor: pointer; background:linear-gradient(180deg,rgba(43,46,83,1) 0%,rgba(108,116,150,1) 100%); border-radius:6px; font-size:14px; font-family:MicrosoftYaHei; color:rgba(255,255,255,1); } } } .theme-right { padding: 0 24px; .theme-right-title { padding-top: 24px; height:19px; font-size:14px; font-family:MicrosoftYaHei-Bold,MicrosoftYaHei; font-weight:bold; color:rgba(13,20,30,0.4); line-height:19px; } .theme-right-list { width: 357px; height: 240px; overflow: scroll; margin-top: 24px; .theme-right-item { width: 160px; height:48px; line-height:48px; float: left; margin-right: 16px; margin-bottom: 16px; background:rgba(247,248,252,1); border-radius:6px; font-size:14px; font-family:MicrosoftYaHei; color:rgba(13,20,30,0.4); text-align: center; cursor: pointer; } } .theme-right-list::before, .theme-right-list::after { content: ''; display: table; } .theme-right-list::after { clear: both; } } .drag-drop-del { position: absolute; right: 1px; top: 0; width: 404px; height: 331px; display: flex; justify-content: center; align-items: center; background-image: url(’../../src/assets/imgs/drapDrop/drag_drop.png’); img { width: 96px; height: 96px; } } } .el-dialog__footer { height: 88px; padding: 24px 24px 0; .dialog-footer { .el-button+.el-button { margin-left: 16px; } } } }}</style>

總結(jié)

到此這篇關(guān)于Vue使用vue-draggable 插件在不同列表之間拖拽功能的文章就介紹到這了,更多相關(guān)vue vue-draggable 插件 拖拽內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 红酒招商加盟-葡萄酒加盟-进口红酒代理-青岛枞木酒业有限公司 | 铝板冲孔网,不锈钢冲孔网,圆孔冲孔网板,鳄鱼嘴-鱼眼防滑板,盾构走道板-江拓数控冲孔网厂-河北江拓丝网有限公司 | 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 | 华中线缆有限公司-电缆厂|电缆厂家|电线电缆厂家 | 螺旋绞龙叶片,螺旋输送机厂家,山东螺旋输送机-淄博长江机械制造有限公司 | 不锈钢复合板厂家_钛钢复合板批发_铜铝复合板供应-威海泓方金属复合材料股份有限公司 | 桁架机器人_桁架机械手_上下料机械手_数控车床机械手-苏州清智科技装备制造有限公司 | 超声波气象站_防爆气象站_空气质量监测站_负氧离子检测仪-风途物联网 | 网优资讯-为循环资源、大宗商品、工业服务提供资讯与行情分析的数据服务平台 | 移动厕所租赁|移动卫生间|上海移动厕所租赁-家瑞租赁 | 水热合成反应釜-防爆高压消解罐-西安常仪仪器设备有限公司 | 桥架-槽式电缆桥架-镀锌桥架-托盘式桥架 - 上海亮族电缆桥架制造有限公司 | 双工位钻铣攻牙机-转换工作台钻攻中心-钻铣攻牙机一体机-浙江利硕自动化设备有限公司 | 消电检公司,消电检价格,北京消电检报告-北京设施检测公司-亿杰(北京)消防工程有限公司 | 多功能三相相位伏安表-变压器短路阻抗测试仪-上海妙定电气 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 合肥通道闸-安徽车牌识别-人脸识别系统厂家-安徽熵控智能技术有限公司 | 全自动过滤器_反冲洗过滤器_自清洗过滤器_量子除垢环_量子环除垢_量子除垢 - 安士睿(北京)过滤设备有限公司 | 定硫仪,量热仪,工业分析仪,马弗炉,煤炭化验设备厂家,煤质化验仪器,焦炭化验设备鹤壁大德煤质工业分析仪,氟氯测定仪 | 首页 - 军军小站|张军博客 | 披萨石_披萨盘_电器家电隔热绵加工定制_佛山市南海区西樵南方综合保温材料厂 | 骨密度检测仪_骨密度分析仪_骨密度仪_动脉硬化检测仪专业生产厂家【品源医疗】 | 生物颗粒燃烧机-生物质燃烧机-热风炉-生物颗粒蒸汽发生器-丽水市久凯能源设备有限公司 | 一航网络-软件测评官网| 安规_综合测试仪,电器安全性能综合测试仪,低压母线槽安规综合测试仪-青岛合众电子有限公司 | 高温链条油|高温润滑脂|轴承润滑脂|机器人保养用油|干膜润滑剂-东莞卓越化学 | 代办建筑资质升级-建筑资质延期就找上海国信启航 | 旋振筛_不锈钢旋振筛_气旋筛_旋振筛厂家—新乡市大汉振动机械有限公司 | 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 圈酒招商网【jiushuitv.com】_酒水招商_代理_加盟平台 | 防水试验机_防水测试设备_防水试验装置_淋雨试验箱-广州岳信试验设备有限公司 | 商标转让-购买商标专业|放心的商标交易网-蜀易标商标网 | 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | 阻燃剂-氢氧化镁-氢氧化铝-沥青阻燃剂-合肥皖燃新材料 | 数控走心机-走心机价格-双主轴走心机-宝宇百科 | 湖南档案密集架,智能,物证,移动,价格-湖南档案密集架厂家 | 塑胶地板-商用PVC地板-pvc地板革-安耐宝pvc塑胶地板厂家 | 盘装氧量分析仪-防爆壁挂氧化锆分析仪-安徽吉帆仪表有限公司 | 中天寰创-内蒙古钢结构厂家|门式刚架|钢结构桁架|钢结构框架|包头钢结构煤棚 | 中视电广_短视频拍摄_短视频推广_短视频代运营_宣传片拍摄_影视广告制作_中视电广 | 济南货架定做_仓储货架生产厂_重型货架厂_仓库货架批发_济南启力仓储设备有限公司 |