VUE使用draggable實(shí)現(xiàn)組件拖拽
本文實(shí)例為大家分享了draggable組件拖拽實(shí)例,供大家參考,具體內(nèi)容如下
實(shí)現(xiàn)步驟
1、導(dǎo)入draggable依賴
npm i -S vuedraggable
2、引入draggable
import draggable from "vuedraggable"
3、注冊draggable
components: {
? ? ?draggable
? },4、使用draggable
html頁面
<div class="col-md-3">
? ? ? <draggable
? ? ? ? class="list-group"
? ? ? ? tag="ul"
? ? ? ? :list="this.list"
? ? ? ? v-bind="dragOptions"
? ? ? ? :move="onMove"
? ? ? ? @start="isDragging = true"
? ? ? ? @end="isDragging = false"
? ? ? >
? ? ? ? <div
? ? ? ? ? class="list-group-item"
? ? ? ? ? v-for="(item, index) in this.list"
? ? ? ? ? :key="item.value"
? ? ? ? >
? ? ? ? ? <span class="badge">{{ index }}</span>
? ? ? ? ? <span class="lefttitle">
? ? ? ? ? ? {{ item.name }}
? ? ? ? ? </span>
? ? ? ? </div>
? ? ? </draggable>
</div>定義屬性和list
data() {
? ? return {
? ? ? list: [
? ? ? ? {
? ? ? ? ? name: "-姓名",
? ? ? ? ? value: "name",
? ? ? ? },
? ? ? ? {
? ? ? ? ? name: "-性別",
? ? ? ? ? value: "sex",
? ? ? ? },
? ? ? ? {
? ? ? ? ? name: "-年齡",
? ? ? ? ? value: "age",
? ? ? ? },
? ? ? ? {
? ? ? ? ? name: "-地址",
? ? ? ? ? value: "address",
? ? ? ? },
? ? ? ? {
? ? ? ? ? name: "-郵箱",
? ? ? ? ? value: "mailbox",
? ? ? ? },
? ? ? ],
? ? ? editable: true, //決定是否可拖動(dòng),為false則組件不可拖動(dòng)
? ? ? isDragging: false,
? ? };
? },定義移動(dòng)方法
methods: {
?
? ? onMove({ relatedContext, draggedContext }) {
? ? ? const relatedElement = relatedContext.element;
? ? ? const draggedElement = draggedContext.element;
? ? ? return (
? ? ? ? (!relatedElement || !relatedElement.fixed) && !draggedElement.fixed
? ? ? );
? ? },
? },5、完整VUE代碼
<template>
? <div class="fluid container">
? ? <div class="form-group form-group-lg panel panel-default">
? ? ? <div class="panel-heading">
? ? ? ? <h3 class="panel-title">組件拖拽實(shí)例</h3>
? ? ? </div>
? ? ? <div class="panel-body">
? ? ? ? <div class="checkbox">
? ? ? ? ? <label
? ? ? ? ? ? ><input type="checkbox" v-model="editable" />設(shè)置組件可拖拽</label
? ? ? ? ? >
? ? ? ? </div>
? ? ? </div>
? ? </div>
?
? ? <div class="col-md-3">
? ? ? <draggable
? ? ? ? class="list-group"
? ? ? ? tag="ul"
? ? ? ? :list="this.list"
? ? ? ? v-bind="dragOptions"
? ? ? ? :move="onMove"
? ? ? ? @start="isDragging = true"
? ? ? ? @end="isDragging = false"
? ? ? >
? ? ? ? <div
? ? ? ? ? class="list-group-item"
? ? ? ? ? v-for="(item, index) in this.list"
? ? ? ? ? :key="item.value"
? ? ? ? >
? ? ? ? ? <span class="badge">{{ index }}</span>
? ? ? ? ? <span class="lefttitle">
? ? ? ? ? ? {{ item.name }}
? ? ? ? ? </span>
? ? ? ? </div>
? ? ? </draggable>
? ? </div>
?
? ? <div class="list-group col-md-3">
? ? ? <pre>{{ listString }}</pre>
? ? </div>
? </div>
</template>
?
<script>
import draggable from "vuedraggable";
export default {
? components: {
? ? draggable,
? },
? data() {
? ? return {
? ? ? list: [
? ? ? ? {
? ? ? ? ? name: "-姓名",
? ? ? ? ? value: "name",
? ? ? ? },
? ? ? ? {
? ? ? ? ? name: "-性別",
? ? ? ? ? value: "sex",
? ? ? ? },
? ? ? ? {
? ? ? ? ? name: "-年齡",
? ? ? ? ? value: "age",
? ? ? ? },
? ? ? ? {
? ? ? ? ? name: "-地址",
? ? ? ? ? value: "address",
? ? ? ? },
? ? ? ? {
? ? ? ? ? name: "-郵箱",
? ? ? ? ? value: "mailbox",
? ? ? ? },
? ? ? ],
? ? ? list2: [],
? ? ? editable: true, //決定是否可拖動(dòng),為false則組件不可拖動(dòng)
? ? ? isDragging: false,
? ? ? delayedDragging: false,
? ? };
? },
? methods: {
?
? ? onMove({ relatedContext, draggedContext }) {
? ? ? const relatedElement = relatedContext.element;
? ? ? const draggedElement = draggedContext.element;
? ? ? return (
? ? ? ? (!relatedElement || !relatedElement.fixed) && !draggedElement.fixed
? ? ? );
? ? },
? },
? computed: {
? ? dragOptions() {
? ? ? return {
? ? ? ? animation: 0,
? ? ? ? group: "description",
? ? ? ? disabled: !this.editable,
? ? ? ? ghostClass: "ghost",
? ? ? };
? ? },
? ? listString() {
? ? ? return JSON.stringify(this.list, null, 2);
? ? },
? },
? watch: {
? ? isDragging(newValue) {
? ? ? if (newValue) {
? ? ? ? this.delayedDragging = true;
? ? ? ? return;
? ? ? }
? ? ? this.$nextTick(() => {
? ? ? ? this.delayedDragging = false;
? ? ? });
? ? },
? },
};
</script>
?
<style>
.flip-list-move {
? transition: transform 0.5s;
}
.no-move {
? transition: transform 0s;
}
.ghost {
? opacity: 0.5;
? background: #c8ebfb;
}
.list-group {
? min-height: 20px;
}
.list-group-item {
? cursor: move;
}
.list-group-item i {
? cursor: pointer;
}
</style>以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- vue拖拽組件vuedraggable使用說明詳解
- 使用vuedraggable實(shí)現(xiàn)從左向右拖拽功能
- vue3使用vuedraggable實(shí)現(xiàn)拖拽功能
- vuedraggable實(shí)現(xiàn)拖拽功能
- vuedraggable實(shí)現(xiàn)簡單拖拽功能
- vuedraggable+element ui實(shí)現(xiàn)頁面控件拖拽排序效果
- 利用Vue-draggable組件實(shí)現(xiàn)Vue項(xiàng)目中表格內(nèi)容的拖拽排序
- Vue.Draggable拖拽功能的配置使用方法
- Vue.Draggable實(shí)現(xiàn)拖拽效果
- Vue draggable實(shí)現(xiàn)從左到右拖拽功能
相關(guān)文章
關(guān)于ElementUI el-table 鼠標(biāo)滾動(dòng)失靈的問題及解決辦法
這篇文章主要介紹了關(guān)于ElementUI el-table 鼠標(biāo)滾動(dòng)失靈的問題及解決辦法,本文給大家分享問題所在原因及解決方案,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08
vue中的虛擬dom知識(shí)點(diǎn)總結(jié)
這篇文章主要介紹了vue中的虛擬dom知識(shí)點(diǎn)總結(jié),文章圍繞主題內(nèi)容展開詳細(xì)介紹,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)有所幫助2022-04-04
原生JS實(shí)現(xiàn)Vue transition fade過渡動(dòng)畫效果示例
這篇文章主要為大家介紹了原生JS實(shí)現(xiàn)Vue transition fade過渡動(dòng)畫效果示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
一篇看懂vuejs的狀態(tài)管理神器 vuex狀態(tài)管理模式
一篇看懂vuejs的狀態(tài)管理神器,Vuex一個(gè)專為Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
Vue-router 切換組件頁面時(shí)進(jìn)入進(jìn)出動(dòng)畫方法
今天小編就為大家分享一篇Vue-router 切換組件頁面時(shí)進(jìn)入進(jìn)出動(dòng)畫方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09
在vue-cli3.0 中使用預(yù)處理器 (Sass/Less/Stylus) 配置全局變量操作
這篇文章主要介紹了在vue-cli3.0 中使用預(yù)處理器 (Sass/Less/Stylus) 配置全局變量操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08

