Xin's blog Xin's blog
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
    • Vue
    • 组件与插件
    • CSS扩展语言
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • 前端框架面试题汇总
  • 基本面试题
  • 进阶面试题
  • 其它
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 前后端联调
  • mock.js
  • 奇技淫巧
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

Xin

英雄可不能临阵脱逃啊~
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
    • Vue
    • 组件与插件
    • CSS扩展语言
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • 前端框架面试题汇总
  • 基本面试题
  • 进阶面试题
  • 其它
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 前后端联调
  • mock.js
  • 奇技淫巧
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • HTML

  • CSS

  • JavaScript

  • Vue

  • 组件与插件

    • ui组件

    • 插件

      • 进度条插件
      • 二维码插件
      • 拖拽插件
        • 安装
        • 使用
          • sortable
          • draggable
  • css扩展语言

  • 学习笔记

  • 前端
  • 组件与插件
  • 插件
ctrlwin
2022-02-24

拖拽插件

# 拖拽插件

参考教程:

  • sortable.js (opens new window)
  • draggable.js (opens new window)
  • element-UI ,Table组件实现拖拽效果 (opens new window)

# 安装

1.引入sortable.js的包

npm install sortable.js --save
1

2.或者

npm i -S vuedraggable
1

vuedraggable依赖Sortable.js,所以下载了vuedraggable,我们便可以直接引入Sortable使用Sortable的特性。

vuedraggable是Sortable一种加强,实现组件化的思想,可以结合Vue,使用起来更方便

# 使用

# sortable

引入插件:

import Sortable from 'sortablejs';
1

看一个实现el-table拖拽的实例。

需要注意的是el-table务必指定row-key,row-key必须是唯一的,如ID,不然会出现排序后数据不对的情况。

<div class="contentCore-table table-common draggable">
      <el-table
        v-loading="listLoading"
        :data="tableList"
        element-loading-text="Loading"
        border
        highlight-current-row
        :row-key="(row) => row.id" 
        empty-text="暂时还没有创建品牌区"
      >
          something...
    </el-table>
</div>
1
2
3
4
5
6
7
8
9
10
11
12
13
mounted(){
    this.rowDrop();
},
methods:{
     // 行拖拽
    rowDrop() {
      const tbody = document.querySelector(
        ".draggable .el-table__body-wrapper tbody" // 指定拖拽对象
      );
      const _this = this;
      Sortable.create(tbody, {
        animation: 200, // 拖拽延迟动画
        draggable: ".draggable .el-table__row", // 指定样式拖拽,这里指定table的行可拖拽
        // handle: ".icon_tuozhuai", // 指定某个元素拖拽,这里指定拖拽按钮拖拽
        onEnd({ newIndex, oldIndex }) { // 拖拽结束方法
           // 更新拖拽后的数组
          const currRow = _this.tableList.splice(oldIndex, 1)[0];
          _this.tableList.splice(newIndex, 0, currRow);
        },
      });
    },   
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

其它设置请参考教程。

# draggable

和sortable差不多,不过draggable使用Draggable组件来进行拖拽。

引入插件:

import Draggable from "vuedraggable";
1

看一个拖拽的实例:

<Draggable
  v-model="groupArr"
  handle=".list_items" <!--指定可拖拽的元素--> 
  animation="300"
  >
    <transition-group>
      <div
        v-for="(ite, ind) in dataList"
        :key="ite.code"
       >
          <div class="list_items">
              something...
          </div>
      </div>
    </transition-group>
</Draggable>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
data(){
    return {
        dataList:[]
    }
},
computed:{
    // 使用计算属性更新拖拽后的数组
    groupArr: {
      get: function () {
        return this.dataList;
      },
      set: function (v) {
        this.dataList.splice(0, this.dataList.length);
        for (let ite of v) {
          this.dataList.push(ite);
        }
        return v;
      },
    },
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

其它设置请参考教程。

在GitHub上编辑 (opens new window)
#plugins
上次更新: 2/24/2022, 2:46:31 PM

← 二维码插件 《JavaScript教程》笔记→

最近更新
01
createElement函数创建虚拟DOM
05-26
02
clipboard 剪切板属性
05-26
03
vue的权限管理
05-16
更多文章>
Theme by Vdoing | Copyright © 2021-2022 Xin | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×