自己封装的vue拖拽组件

使用Vue.Draggable实现

Vue.Draggable的基础使用方法可以看看这个哥们的https://blog.csdn.net/zjiang1994/article/details/79809687

实现效果如下,用的好的话点个赞 谢谢

<template><div class="dndList"><el-tabs v-model="activeName" @tab-click="handleClick"><el-tab-pane label="事务执行" name="first"><!--所有的能力项--><div class="dndList-list1"><div class="fontz1 pos1">事务型:</div><div class="fontz1 pos2">操作型:</div><div class="fontz1 pos3">技能型:</div><draggable:list="oldList1":options="{group: { name: falgs, pull: 'clone' },filter: '.undraggable',sort: false,}"@end="end1"class="dragArea"><divv-for="element in oldList1":key="element.id":class="{ undraggable: element.flag }"class="list-complete-item2"><div class="list-complete-item-handle2">{{ element.name }}</div></div></draggable></div></el-tab-pane><el-tab-pane label="研发策划" name="second"><div class="dndList-list1"><div class="fontz1 pos1">事务型:</div><div class="fontz1 pos2">操作型:</div><div class="fontz1 pos3">技能型:</div><draggable:list="oldList2":options="{group: { name: falgs, pull: 'clone' },filter: '.undraggable',sort: false,}"@end="end2"class="dragArea"><divv-for="element in oldList2":key="element.id":class="{ undraggable: element.flag }"class="list-complete-item2"><div class="list-complete-item-handle2">{{ element.name }}</div></div></draggable></div></el-tab-pane><el-tab-pane label="服务关系" name="third"><div class="dndList-list1"><div class="fontz1 pos1">事务型:</div><div class="fontz1 pos2">操作型:</div><div class="fontz1 pos3">技能型:</div><draggable:list="oldList3":options="{group: { name: falgs, pull: 'clone' },filter: '.undraggable',sort: false,}"@end="end3"class="dragArea"><divv-for="element in oldList3":key="element.id":class="{ undraggable: element.flag }"class="list-complete-item2"><div class="list-complete-item-handle2">{{ element.name }}</div></div></draggable></div></el-tab-pane><el-tab-pane label="开拓影响" name="fourth"><div class="dndList-list1"><div class="fontz1 pos1">事务型:</div><div class="fontz1 pos2">操作型:</div><div class="fontz1 pos3">技能型:</div><draggable:list="oldList4":options="{group: { name: falgs, pull: 'clone' },filter: '.undraggable',sort: false,}"@end="end4"class="dragArea"><divv-for="element in oldList4":key="element.id":class="{ undraggable: element.flag }"class="list-complete-item2"><div class="list-complete-item-handle2">{{ element.name }}</div></div></draggable></div></el-tab-pane></el-tabs><div class="dndList-list" style="font-size:18px; border-top: none; border-bottom: none;"><span>将所需要的内在能力拖拽至下方框中</span></div><!--需要的能力项--><div class="dndList-list"><div><div class="rongqi"><div></div><div></div><div></div><div></div></div><el-row><el-col :span="3"><div class="fontz">主要能力:</div></el-col><el-col :span="20"><draggable:list="list1":options="{ group: 'article', disabled: disabled }"@start="start22"@end="end22"class="dragArea11"style="height: 90px"><divv-for="(element, index) in list1":key="element.id"class="list-complete-item"><div class="list-complete-item-handle">{{ element.name }}<iclass="el-icon-delete"@click="handleDel1(index, element.id)"></i></div></div></draggable></el-col></el-row></div><div><div class="rongqi"><div></div><div></div><div></div><div></div></div><el-row><el-col :span="3"><div class="fontz">辅助能力:</div></el-col><el-col :span="20"><draggable:list="list2":options="{ group: 'article', disabled: disabled }"@start="start22"@end="end22"class="dragArea11"style="height: 90px"><divv-for="(element, index) in list2":key="element.id"class="list-complete-item"><div class="list-complete-item-handle">{{ element.name }}<iclass="el-icon-delete"@click="handleDel2(index, element.id)"></i></div></div></draggable></el-col></el-row></div><div><div class="rongqi"><div></div><div></div><div></div><div></div></div><el-row><el-col :span="3"><div class="fontz">次要能力:</div></el-col><el-col :span="20"><draggable:list="list3":options="{ group: 'article', disabled: disabled }"@start="start22"@end="end22"class="dragArea11"style="height: 90px"><divv-for="(element, index) in list3":key="element.id"class="list-complete-item"><div class="list-complete-item-handle">{{ element.name }}<iclass="el-icon-delete"@click="handleDel3(index, element.id)"></i></div></div></draggable></el-col></el-row></div></div></div>
</template>
<script>
import draggable from "vuedraggable";export default {name: "DndList",components: { draggable },watch: {},data() {return {activeName: "first",falgs: "article",disabled: false,list1: [],list2: [],list3: [],oldList1: [{ id: 1, name: "能力1" },{ id: 2, name: "能力2" },{ id: 3, name: "能力3" },{ id: 4, name: "能力4" },{ id: 5, name: "能力5" },{ id: 6, name: "能力6" },{ id: 7, name: "能力7" },{ id: 8, name: "能力8" },{ id: 9, name: "能力9" },{ id: 10, name: "能力10" },{ id: 11, name: "能力11" },{ id: 12, name: "能力12" },],oldList2: [{ id: 13, name: "能力13" },{ id: 14, name: "能力14" },{ id: 15, name: "能力15" },{ id: 16, name: "能力16" },{ id: 17, name: "能力17" },{ id: 18, name: "能力18" },{ id: 19, name: "能力19" },{ id: 20, name: "能力20" },{ id: 21, name: "能力21" },{ id: 22, name: "能力22" },{ id: 23, name: "能力23" },{ id: 24, name: "能力24" },],oldList3: [{ id: 25, name: "能力25" },{ id: 26, name: "能力26" },{ id: 27, name: "能力27" },{ id: 28, name: "能力28" },{ id: 29, name: "能力29" },{ id: 30, name: "能力30" },{ id: 31, name: "能力31" },{ id: 32, name: "能力32" },{ id: 33, name: "能力33" },{ id: 34, name: "能力34" },{ id: 35, name: "能力35" },{ id: 36, name: "能力36" },],oldList4: [{ id: 37, name: "能力37" },{ id: 38, name: "能力38" },{ id: 39, name: "能力39" },{ id: 40, name: "能力40" },{ id: 41, name: "能力41" },{ id: 42, name: "能力42" },{ id: 43, name: "能力43" },{ id: 44, name: "能力44" },{ id: 45, name: "能力45" },{ id: 46, name: "能力46" },{ id: 47, name: "能力47" },{ id: 48, name: "能力48" },],};},watch: {list1(val) {if(val.length>4){this.handleDel1(4,val[4].id)}},list2(val) {if(val.length>4){this.handleDel2(4,val[4].id)}},list3(val) {if(val.length>4){this.handleDel3(4,val[4].id)}},},computed: {},methods: {childMethod(){console.log(this.oldList1)console.log(this.oldList2)console.log(this.oldList3)console.log(this.oldList4)console.log(this.list1)console.log(this.list2)console.log(this.list3)},handleClick(tab, event) {console.log(tab, event);},end1(ev) {if (ev.to.className === "dragArea11") {this.$set(this.oldList1[ev.oldIndex], "flag", true);}},end2(ev) {if (ev.to.className === "dragArea11") {this.$set(this.oldList2[ev.oldIndex], "flag", true);}},end3(ev) {if (ev.to.className === "dragArea11") {this.$set(this.oldList3[ev.oldIndex], "flag", true);}},end4(ev) {if (ev.to.className === "dragArea11") {this.$set(this.oldList4[ev.oldIndex], "flag", true);}},start22(event) {this.falgs = "222222";},end22(ev) {this.falgs = "article";},handleDel1(index, id) {this.list1.splice(index, 1);var q;if (id < 13) {q = this.oldList1.find((value, index, arr) => {return value.id === id;});} else if (12 < id && id < 25) {q = this.oldList2.find((value, index, arr) => {return value.id === id;});} else if (24 < id && id < 37) {q = this.oldList3.find((value, index, arr) => {return value.id === id;});} else {q = this.oldList4.find((value, index, arr) => {return value.id === id;});}this.$set(q, "flag", false);},handleDel2(index, id) {this.list2.splice(index, 1);var q;if (id < 13) {q = this.oldList1.find((value, index, arr) => {return value.id === id;});} else if (12 < id && id < 25) {q = this.oldList2.find((value, index, arr) => {return value.id === id;});} else if (24 < id && id < 37) {q = this.oldList3.find((value, index, arr) => {return value.id === id;});} else {q = this.oldList4.find((value, index, arr) => {return value.id === id;});}this.$set(q, "flag", false);},handleDel3(index, id) {this.list3.splice(index, 1);var q;if (id < 13) {q = this.oldList1.find((value, index, arr) => {return value.id === id;});} else if (12 < id && id < 25) {q = this.oldList2.find((value, index, arr) => {return value.id === id;});} else if (24 < id && id < 37) {q = this.oldList3.find((value, index, arr) => {return value.id === id;});} else {q = this.oldList4.find((value, index, arr) => {return value.id === id;});}this.$set(q, "flag", false);},},
};
</script><style rel="stylesheet/scss" lang="scss" scoped>
.pos1 {position: absolute;top: 20px;
}
.pos2 {position: absolute;top: 92px;
}
.pos3 {position: absolute;top: 162px;
}
.rongqi {width: 100%;position: absolute;left: 120px;div {float: left;width: 150px;height: 50px;border-radius: 4px;margin: 20px 20px 0 0;border: 1px solid #000;}
}
.dragArea11 {width: 700px;overflow: hidden;
}.dndList-list1 {color: #000;position: relative;width: 830px;border: 1px solid #000;padding: 0 20px 20px;border-top: none;//   margin: 20px;
}
.dndList-list {color: #000;width: 830px;border: 1px solid #000;padding: 20px;//   margin: 20px;
}
.fontz {height: 100px;line-height: 90px;font-size: 18px;font-family: "微软雅黑";font-weight: 600;
}
.fontz1 {height: 50px;line-height: 50px;font-size: 18px;font-family: "微软雅黑";font-weight: 600;
}
.list-complete-item {cursor: pointer;position: relative;font-size: 16px;line-height: 50px;text-align: center;display: inline-block;margin-right: 20px;width: 150px;height: 50px;border-radius: 4px;margin: 20px 20px 0 0;border: 1px solid #000;transition: all 1s;
}
.dragArea {width: 680px;position: relative;right: -98px;
}
.list-complete-item2 {cursor: pointer;position: relative;font-size: 16px;line-height: 50px;text-align: center;display: inline-block;margin: 20px 20px 0 0;width: 150px;height: 50px;border-radius: 4px;border: 1px solid #000;transition: all 1s;
}
.list-complete-item.sortable-chosen {background: #4AB7BD;
}.list-complete-item.sortable-ghost {background: #30B08F;
}
.undraggable {background-color: #ccc;
}.list-complete-enter,
.list-complete-leave-active {opacity: 0;
}
</style>
<style lang="less">
.dndList {.el-tabs__header {width: 830px;margin: 0;border: 1px solid #000;}.el-tabs__nav-wrap::after {background-color: #000;}.el-tabs__item {font-size: 20px;height: 50px;line-height: 50px;width: 200px;text-align: center;}
}
</style>

自己封装的vue拖拽组件相关推荐

  1. Vue拖拽组件开发实例

    为什么选择Vue? 主要原因:对于前端开发来说,兼容性是我们必须要考虑的问题之一.我们的项目不需要兼容低版本浏览器.项目本身也是一个数据驱动型的.加之,Vue本身具有以下主要特性: 使用虚拟DOM: ...

  2. 最好用的 6 款 Vue 拖拽组件库推荐 - 卡拉云

    本文首发:<最好用的 6 款 Vue 拖拽组件库推荐 - 卡拉云> Vue 拖拽组件库(drag-and-drop)组件在使用 Vue 框架开发中非常常见的需求,做个内容行排序,拖拽小组件 ...

  3. vue拖拽组件超好用!!!

    vue拖拽组件 在vue实现拖拽,经常使用到,所以自己封装了成了一个组件 效果展示 组件代码 <template><div class="dragBtn" @to ...

  4. vue拖拽组件(app移动端)

    vue拖拽组件 <template><div id="webId"><!-- 1.1 如果碰到滑动问题,请检查这里是否属于同一点. -->< ...

  5. vue拖拽组件,从此解放你的双手

    一??vue拖拽.拖拽 它来啦!它来啦! -机智如我一??? 特别简单 ,安装.注册.引用 即可完成拖拽需求 控制台 一??打印拖拽信息一??? 一??1.npm安装 npm install awe- ...

  6. VUE 拖拽组件 vue.draggable

    中文文档 https://www.itxst.com/vue-draggable/tutorial.html 安装 npm i -S vuedraggable 属性 属性名称 说明 group :gr ...

  7. 简单使用vue拖拽组件vue3-dnd

    项目中需要使用到拖拽,这里使用vue3-dnd来满足需求 这里项目使用的vue3(使用js而非ts) 插件官网地址:Vue3 DnD 安装 npm install vue3-dnd react-dnd ...

  8. vue拖拽组件生成页面代码,vue可视化拖拽组件模板

    怎么使用vuedraggable实现简单的拖拽,只拖拽一个内容(div) . 仔细观察发现,今日头条导航部分编辑效果,有以下几个效果1:点击编辑开启可以编辑的效果(也就是是否开启拖拽)2:拖拽前选中效 ...

  9. Vue 拖拽组件(实现上下拖拽) vuedraggable

    fm: 首先 npm i -S vuedraggable 这样可以实现一列按钮之间 可以进行上下拖拽 重新排版 <template><vuedraggable v-model=&qu ...

最新文章

  1. C 的异常捕捉实现
  2. python画-python如何画出漂亮的地图?
  3. obs多推流地址_抖音obs推流直播怎么操作,抖音直播推流地址如何获取?
  4. NodeJs连接Mysql数据库
  5. 【NLP】NLP提效,除了选择合适的模型,就是数据增强了
  6. 云效云栖大会首发应用交付和项目协作新品,助力企业DevOps到BizDevOps
  7. 每日程序C语言17-打印出好看的菱形
  8. IAR在写结构体时不提示_智能物流装车系统的结构优化与改进
  9. layer绑定回车事件(转)
  10. html导航栏文字怎么平均,对齐HTML/CSS导航栏中的文本?
  11. VM安装ubuntu18.04完成时不能上网,显示cable unplugged
  12. 编程开源_立即注册免费的在线开源编程课程
  13. “意念打字”终成真!准确率超 99%,还登上了《Nature》封面!
  14. Java1009_疯狂java学习笔记1009---异常
  15. 8.10.3 熊猫分布密度制图
  16. 音乐节奏提取matlab,音乐旋律提取算法 附可执行demo
  17. html设置分割线虚线,css border设置虚线样式?
  18. VBS隐藏bat窗口
  19. 计算机毕业设计ssm文档资料管理系统
  20. 我的目标在哪里——一个程序员的规划

热门文章

  1. kafka接受不到数据
  2. 星基ADS-B系统测试方案
  3. 2020A证(安全员)模拟考试系统及A证(安全员)实操考试视频
  4. 油漆桶beta1.0
  5. 自助收银、刷脸支付为零售门店升级智慧赋能
  6. 【IDEA使用技巧】使用阿里统一的code style规范你的代码格式
  7. Ubuntu 16.04 pip2安装/或更新失败解决办法
  8. 游泳品牌推荐榜,四款排名靠前的游泳耳机推荐
  9. android studio操作手机相机,Android Studio 调用Camera实现拍照功能
  10. 为什么说IPv6比IPv4更为安全