本文章转自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. Netty3:分隔符和定长解码器

    回顾TCP粘包/拆包问题解决方案 上文详细说了TCP粘包/拆包问题产生的原因及解决方式,并以LineBasedFrameDecoder为例演示了粘包/拆包问题的实际解决方案,本文再介绍两种粘包/拆包问 ...

  2. springboot项目上传文件出现临时文件目录为空

    最近写文件上传到服务器读取的代码,前端使用FormData上传,服务端用MultipartFile接收,自己测试了下MultipartFile对象有什么东西,结果一般属性都能出来,测试getInput ...

  3. PS抠图简单粗暴2种方法

    1.矩形框住要抠的→ Ctrl+j →选中图层 →矩形框住 →图像裁剪另存为 2.钢笔工具框住要抠的→ Ctrl+Enter→ Ctrl+j→.钢笔框住→图像裁剪另存为

  4. js 实现 复制 功能 (zeroclipboard)

    #复制功能因访问权限和安全问题, 被浏览器禁了# 我要实现的功能:点击复制按钮,复制浏览器的当前页面地址,加上用户选择的参数(用户查找过滤),直接将该链接发给别人,点击打开就是对应的查找结果而不是默认 ...

  5. 如何用cmake编译

    本文由云+社区发表 作者:工程师小熊 CMake编译原理 CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多.CMake主要是编写CMakeLists.txt文件,然后用cmake ...

  6. 使用seaborn探索泰坦尼克号上乘客能否获救

    titanic数据集是个著名的数据集.kaggle上的titanic乘客生还率预测比赛是一个很好的入门机器学习的比赛. 数据集下载可以去https://www.kaggle.com/c/titanic ...

  7. Celery工具

    什么是Celery Celery的功能 Celery是基于python实现的第三方组件,可以实现定时任务.周期任务等. Celery的组成 Celery的角色 - 任务,创建或发布任务. - 使用re ...

  8. 树莓派linux系统中显示隐藏文件的几种方法

    一.如果直接使用可视化文件管理器 1.直接点击右键,直接选择“显示隐藏文件”选项. 2.快捷键 CTRL + H 二.在终端命令行模式下 可以使用ls命令的-a参数来显示隐藏的文件及文件夹. ls - ...

  9. python基础之逻辑运算符

    python逻辑运算符: ①and ‘与’ 总结: 如果and左边为False,则直接返回左边的结果(False) 如果and左边为True,则返回的结果取决于右边的数值 ②or ‘或’ 总结: 如果 ...

  10. mysql-16进制、十进制互转

    先截取左边4位,再转换: conv(left(t1.DEVICEID, 4), 16, 10)      //转十进制 conv(left(t1.DEVICEID, 4), 10, 16)      ...