【Vue实用功能】Vue实现拖拽元素、列表拖拽排序

Vue实现拖拽元素、列表拖拽排序

需求:
	1、左右两个容器,左边和右边的元素可以拖动互换
	2、列表拖拽排序

组件使用

Vue.Draggable是一款基于Sortable.js实现的vue拖拽插件支持移动设备、拖拽和选择文本、智能滚动,可以在不同列表间拖拽、不依赖jQuery为基础,vue2过渡动画兼容、支持撤销操作,总之是一款非常优秀的vue拖拽组件

npm或yarn安装方式

yarn add vuedraggable
npm i -S vuedraggable
<template>
  <div>
    
    <div class="itxst">
      <div>自定义控制拖拽和停靠div>
      <div class="col">
        
        
        <draggable v-model="arr1" group="itxst" ghostClass="ghost" chosenClass="chosen" filter=".forbid" animation="300"
          :move="onMove">
          <transition-group>
            <div :class="item.id==1?'item forbid':'item'" v-for="item in arr1" :key="item.id">{{item.name}}div>
          transition-group>
        draggable>
      div>
      
      <div class="col">
        <draggable v-model="arr2" group="itxst" ghostClass="ghost" chosenClass="chosen" filter=".forbid" animation="300"
          :move="onMove">
          <transition-group>
            <div :class="item.id==1?'item forbid':'item'" v-for="item in arr2" :key="item.id">{{item.name}}div>
          transition-group>
        draggable>
      div>
    div>
  div>
template>
<script>
  //导入draggable组件
  import draggable from 'vuedraggable'
  export default {
    //注册draggable组件
    components: {
      draggable,
    },
    data() {
      return {
        //定义要被拖拽对象的数组
        arr1: [{
            id: 1,
            name: 'www.itxst.com(不允许停靠)'
          },
          {
            id: 2,
            name: 'www.jd.com'
          },
          {
            id: 3,
            name: 'www.baidu.com'
          },
          {
            id: 5,
            name: 'www.google.com'
          },
          {
            id: 4,
            name: 'www.taobao.com(不允许拖拽)'
          }
        ],
        arr2: [{
            id: 11,
            name: '微软'
          },
          {
            id: 12,
            name: '亚马逊'
          },
          {
            id: 13,
            name: '京东'
          },
          {
            id: 15,
            name: '谷歌'
          },
          {
            id: 14,
            name: '苹果'
          }
        ]
      };
    },
    methods: {
      //move回调方法
      onMove(e, originalEvent) {
        console.log(e)
        console.log(originalEvent)
        //不允许停靠
        if (e.relatedContext.element.id == 1) return false;
        //不允许拖拽
        if (e.draggedContext.element.id == 4) return false;
        return true;
      },
    },
  };
script>
<style scoped>
  /*定义要拖拽元素的样式*/
  .drag {
    background-color: blue !important;
    border: solid 3px red;
  }

  .chosen {
    background-color: #333 !important;
    color: #fff;
  }

  .ghost {
    background-color: red !important;
  }

  .itxst {
    margin: 10px;
    text-align: left;
  }

  .col {
    width: 40%;
    flex: 1;
    padding: 10px;
    border: solid 1px #eee;
    border-radius: 5px;
    float: left;
  }

  .col+.col {
    margin-left: 10px;
  }

  .item {
    padding: 6px 12px;
    margin: 0px 10px 0px 10px;
    border: solid 1px #eee;
    background-color: #f1f1f1;
    text-align: left;
  }

  .item+.item {
    border-top: none;
    margin-top: 6px;
  }

  .item:hover {
    background-color: #fdfdfd;
    cursor: move;
  }
style>

【Vue实用功能】Vue实现拖拽元素、列表拖拽排序_第1张图片

你可能感兴趣的:(Vue实用功能,vue.js,javascript,前端)