本文章转自https://blog.csdn.net/zjiang1994/article/details/79809687

Vue.Draggable学习总结 Draggable为基于Sortable.js的vue组件,用以实现拖拽功能。

特性 支持触摸设备 支持拖拽和选择文本 支持智能滚动 支持不同列表之间的拖拽 不以jQuery为基础 和视图模型同步刷新 和vue2的国度动画兼容 支持撤销操作 当需要完全控制时,可以抛出所有变化 可以和现有的UI组件兼容 安装 npm install vuedraggable 1 引入 import draggable from 'vuedraggable' 1 基础用法 定义一个json串 list,实现它的拖拽排序。

<template>
 <div>
   <!-- 调用组件 -->
   <draggable element="ul" v-model="list">
     <li v-for="item in list">{{item.name}}</li>
   </draggable>
   <!-- 输出list数据 -->
  {{list}}
 </div>
</template>
<script>
// 引入拖拽组件
import draggable from 'vuedraggable'
export default {
 name: 'demo',
 components: {
   //调用组件
   draggable,
},
 data () {
   return {
     list:[
      {
         id: 1,
         name: 'a'
      },
      {
         id: 2,
         name: 'b'
      },
      {
         id: 3,
         name: 'c'
      },
      {
         id: 4,
         name: 'd'
      },
      {
         id: 5,
         name: 'e'
      },
      {
         id: 6,
         name: 'f'
      },
    ]
  }
</script>

属性

value

Array,非必须,默认为null

用于实现拖拽的list,通常和内部v-for循环的数组为同一数组。 最好使用vuex来实现传入。 不是直接使用,而是通过v-model引入。

<draggable v-model="myArray">

list

Array,非必须,默认为null

就是value的替代品。 和v-model不能共用 从表现上没有看出不同

element

String,默认div

就是<draggable>标签在渲染后展现出来的标签类型 也是包含拖动列表和插槽的外部标签 可以用来兼容UI组件

options

Object

配置项

  • group: string or array 分组用的,同一组的不同list可以相互拖动

  • sort: boolean 定义是否可以拖拽

  • delay:number 定义鼠标选中列表单元可以开始拖动的延迟时间

  • touchStartThreshold:number (不清楚)

  • disabled: boolean 定义是否此sortable对象是否可用,为true时sortable对象不能拖放排序等功能

  • store:

  • animation: umber 单位:ms 动画时间

  • handle: selector 格式为简单css选择器的字符串,使列表单元中符合选择器的元素成为拖动的手柄,只有按住拖动手柄才能使列表单元进行拖动

  • filter: selector 格式为简单css选择器的字符串,定义哪些列表单元不能进行拖放,可设置为多个选择器,中间用“,”分隔

  • preventOnFilter: 当拖动filter时是否触发event.preventDefault()默认触发

  • draggable: selector 格式为简单css选择器的字符串,定义哪些列表单元可以进行拖放

  • ghostClass: selector 格式为简单css选择器的字符串,当拖动列表单元时会生成一个副本作为影子单元来模拟被拖动单元排序的情况,此配置项就是来给这个影子单元添加一个class,我们可以通过这种方式来给影子元素进行编辑样式

  • chosenClass: selector 格式为简单css选择器的字符串,目标被选中时添加

  • dragClass:selector 格式为简单css选择器的字符串,目标拖动过程中添加

  • forceFallback: boolean 如果设置为true时,将不使用原生的html5的拖放,可以修改一些拖放中元素的样式等

  • fallbackClass: string 当forceFallback设置为true时,拖放过程中鼠标附着单元的样式

  • dataIdAttr: data-id

  • scroll:boolean当排序的容器是个可滚动的区域,拖放可以引起区域滚动

  • scrollFn:function(offsetX, offsetY, originalEvent, touchEvt, hoverTargetEl) { … } 用于自定义滚动条的适配

  • scrollSensitivity: number 就是鼠标靠近边缘多远开始滚动默认30

  • scrollSpeed: number 滚动速度

函数配置

  • setData: 设置值时的回调函数

  • onChoose: 选择单元时的回调函数

  • onStart: 开始拖动时的回调函数

  • onEnd: 拖动结束时的回调函数

  • onAdd: 添加单元时的回调函数

  • onUpdate: 排序发生变化时的回调函数

  • onRemove: 单元被移动到另一个列表时的回调函数

  • onFilter: 尝试选择一个被filter过滤的单元的回调函数

  • onMove: 移动单元时的回调函数

  • onClone: clone时的回调函数

  • 以上函数对象的属性:

    • to: 移动到的列表的容器

    • from:来源列表容器

    • item: 被移动的单元

    • clone: 副本的单元

    • oldIndex:移动前的序号

clone

function,默认值: 无处理

  • 这一项要配合着optionsgroup项的pull项处理,当pull:'clone时的拖拽的回调函数’

  • 就是克隆的意思。

  • 可以理解为正常的拖拽变成了复制

  • 当为true时克隆

move

function,默认值:null

  • 就是拖拽项时调用的函数

  • 用来确定拖拽是否生效

  • 返回null时可以生效

  • 可以通过函数判断

  • 有一个参数:evt

    • evt为object

    • draggedContext: 被拖拽元素的上下文

      • index:拖拽元素的指针

      • element: 拖拽数据本身

      • futureIndex: 拖动后的index

    • relatedContext: 拖入区域的上下文

      • index: 目标元素的index

      • element:目标数据本身

      • list: 拖入的列表

      • component:目标组件

<draggable element="ul" v-model="list" :move='allow'>
...
methods: {
allow(evt) {
  console.log(evt.draggedContext.index)
  console.log(evt.draggedContext.element)
  console.log(evt.draggedContext.futureIndex)
  console.log(evt.relatedContext.index)
  console.log(evt.relatedContext.element)
  console.log(evt.relatedContext.list)
  console.log(evt.relatedContext.component)
  return (evt.draggedContext.element.name!== 'b')
}
}

componentData

Object,默认值:null

  • 用来结合UI组件的,可以理解为代理了UI组件的定制信息

  • 包含两项:props和on

    • props用来代理UI组件需要绑定的属性(:)

    • on用来代理UI组件需要绑定的事件(@)

<draggable element="el-collapse" :list="list" :component-data="getComponentData()">
 <el-collapse-item v-for="e in list" :title="e.title" :name="e.name" :key="e.name">
   <div>{{e.description}}</div>
  </el-collapse-item>
</draggable>
methods: {
handleChange() {
  console.log('changed');
},
inputChanged(value) {
  this.activeNames = value;
},
getComponentData() {
  return {
    on: {
      change: this.handleChange,
      input: this.inputChanged
    },
    props: {
      value: this.activeNames
    }
  };
}
}

事件

有以下几种

start, add, remove, update, end, choose, sort, filter, clone

参数带有如下属性:

  • add: 包含被添加到列表的元素

    • newIndex: 添加后的新索引

    • element: 被添加的元素

  • removed: 从列表中移除的元素

    • oldIndex: 移除前的索引

    • element: 被移除的元素

  • moved:内部移动的

    • newIndex: 改变后的索引

    • oldIndex: 改变前的索引

    • element: 被移动的元素

插槽

提供一个footer插槽,在排序列表之下。 永远位于最下方。

<draggable v-model="myArray" :options="{draggable:'.item'}">
   <div v-for="element in myArray" :key="element.id" class="item">
      {{element.name}}
   </div>
   <button slot="footer" @click="addPeople">Add</button>
</draggable>

Vue.Draggable 文档总结的更多相关文章

  1. Vue 学习文档

    Vue 学习文档 vue 起步 引包 启动 new Vue(options) options: el 目的地(可以用类名.标签名等,也可以直接用mod元素) #elementId .elementCl ...

  2. 解放生产力,自动化生成vue组件文档

    一.现状 Vue框架在前端开发中应用广泛,当一个多人开发的Vue项目经过长期维护之后往往会沉淀出很多的公共组件,这个时候经常会出现一个人 开发了一个组件而其他维护者或新接手的人却不知道这个组件是做什么 ...

  3. vite插件-自动生成vue组件文档

    特点 支持热更新 快速启动,依赖于 vite,无需另起服务 自动生成组件导航 ui 采用了vant-ui的样式 核心方法覆盖率达到了 92.86% 使用 yarn add vite-plugin-vu ...

  4. 打造自己的Vue组件文档生成工具

    程序员最讨厌的两件事情,第一种是写文档,另一种是别人没有写文档.有没有直接根据vue组件生成文档的呢?当然是有的的.但第三方使用起来不一定能和现有项目结合使用,往往需要额外的注释用来标记提取信息.使用 ...

  5. Vue.js文档

    参考网址:https://vuefe.cn/ 第一  安装 1.下载到本地后使用<script>标签直接引入 2.使用CDN引入 例如:使用CDN引入 <script src=&qu ...

  6. Vue.js文档学习

    Vue细碎小点 生命周期钩子:created().mounted().updated().destroyed() 不要在选项属性或回调上使用箭头函数,比如 created: () => cons ...

  7. vue路由文档笔记

    引入router this.$router 和 router 使用起来完全一样.我们使用 this.$router 的原因是我们并不想在每个独立需要封装路由的组件中都导入路由 可以在任何组件内通过 t ...

  8. 一文搭建自己博客/文档系统:搭建,自动编译和部署,域名,HTTPS,备案等

    本文纯原创,搭建后的博客/文档网站可以参考: Java 全栈知识体系.如需转载请说明原处. 第一部分 - 博客/文档系统的搭建 搭建博客有很多选择,平台性的比如: 知名的CSDN, 博客园, 知乎,简 ...

  9. 基于 vite2 + Vue3 写一个在线帮助文档工具

    提起帮助文档,想必大家都会想到 VuePress等,我也体验了一下,但是感觉和我的思路不太一样,我希望的是那种可以直接在线编辑文档,然后无需编译就可以直接发布的方式,另外可以在线写(修改)代码并且运行 ...

随机推荐

  1. Android 开发学习资源汇总

    下面这些资源对Android开发来说是很有帮助的! 1. 在线代码运行工具 地址:https://tool.lu/coderunner/ 说明:此工具站能在线运行C.C++.Java,基本能满足相关基 ...

  2. 调研pwa和sw

    概述 处于好奇,最近我调研了一下pwa和service worker,有些新的,记录下来,供以后开发时参考,相信对其他人也有用.pwa主要是通过service worker实现的,它主要包括桌面图标, ...

  3. python实现列表的排序

    群里有同行遇到这样一个面试题:有一个整数构成的列表,需要给这个列表进行从小到大存入到另一个列表中. 本身排序可以用python的内置函数sort和sorted,但题目的要求是手动实现. 看起来很简单, ...

  4. shell打印 菱形

    #!/bin/bashread -p "input the length: " n        for i in `seq 1 $n`do    for ((j=$n;j> ...

  5. mybatis入门系列二之输入与输出参数

    mybatis入门系列二之详解输入与输出参数   基础知识   mybatis规定mapp.xml中每一个SQL语句形式上只能有一个@parameterType和一个@resultType 1. 返回 ...

  6. Ubuntu:命令行下浏览网页

    前述 兴起,试一下不用图形化界面浏览 安装w3m 直接进入root账号 apt-get install w3m 检验是否成功 w3m www.baidu.com 就这样成功的进入baidu了,纯文本模 ...

  7. Chapter 5 Blood Type——32

    "Where are you all going, exactly?" He was still looking ahead, expressionless. “真的,你要去哪里? ...

  8. vue-cli项目使用mock数据的方法(借助express)

    前言 现如今前后端分离开发越来越普遍,前端人员写好页面后可以自己模拟一些数据进行代码测试,这样就不必等后端接口,提高了我们开发效率.今天就来分析下前端常用的mock数据的方式是如何实现的. 主体 项目 ...

  9. C++11智能指针的深度理解

    平时习惯使用cocos2d-x的Ref内存模式,回过头来在控制台项目中觉得c++的智能指针有点生疏,于是便重温一下.首先有请c++智能指针们登场: std::auto_ptr.std::unique_ ...

  10. 能够玩转BKY皮肤的 geek,有一半最后都成为了前端大师

    By Conmajia March 9, 2018 剩下的那一半全部扑街了. 世纪之初,BKY那些花里胡哨的预设皮肤曾经让初识网络的懵懂学子雀跃不已. 然而以现在的审美眼光看来,这些带着一股子扑面而来 ...