本文章转自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. 分布式理论 之 CAP 定理

    -----------------------------------------------------入巷间吃汤面 笑看窗边飞雪. 目录: 什么是 CAP 定理 为什么只能 3 选 2 能不能解决 ...

  2. 宝塔面板设置腾迅COS自动备份网站

    之前写了如何配置腾迅云COS并挂载到服务器中,今天看到宝塔面板中有腾迅云COS的插件,不过研究了下,只是将COS绑定在宝塔面板中,不能自动备份,需要用到宝塔的计划任务功能 1.下载腾迅云COS插件 2 ...

  3. 【Caffe篇】--Caffe solver层从初始到应用

    一.前述 solve主要是定义求解过程,超参数的 二.具体 #往往loss function是非凸的,没有解析解,我们需要通过优化方法来求解. #caffe提供了六种优化算法来求解最优参数,在solv ...

  4. 【朝花夕拾】四大组件之(二)Service篇

    一.Service是什么 对于这个问题,想必大家都能说出一二,如“它是四大组件之一”.“在后台处理一些操作”等.咱们这里看看官方文档中的描述,官方语言一般都是准确且言简意赅的,这里可以体验一下其风格. ...

  5. Python:bs4的使用

    概述 bs4 全名 BeautifulSoup,是编写 python 爬虫常用库之一,主要用来解析 html 标签. 一.初始化 from bs4 import BeautifulSoup soup ...

  6. SLAM+语音机器人DIY系列:(一)Linux基础——3.Linux命令行基础操作

    摘要 由于机器人SLAM.自动导航.语音交互这一系列算法都在机器人操作系统ROS中有很好的支持,所以后续的章节中都会使用ROS来组织构建代码:而ROS又是安装在Linux发行版ubuntu系统之上的, ...

  7. Writing a Simple Publisher and Subscriber

    用c++实现一个publisher/subscriber publisher #include "ros/ros.h" #include "std_msgs/String ...

  8. jsp内置对象-exception对象

    1.概念:当JSP页面发生错误产生异常时,使用隐含对象exception针对该异常做出相应的处理.使用exception对象时,需要在page指令中设定:<%@page isErrorPage= ...

  9. 安装odoo小程序商城模块报错 KeyError: u'oejia_weshop'

    错误截图如下 检查模块目录名是否不是 oejia_weshop,比如 oejia_weshop-master,注意odoo的模块名不能随便更改,odoo小程序商城模块目录名必须是oejia_wesho ...

  10. Oracle函数——日期函数

    Oracle中的时间类型只有date和TIMESTAMP,TIMESTAMP是比date更精确的类型.日期时间函数用于处理时间类型的数据,Oracle以7位数字格式来存放日期数据,包括世纪.年.月.日 ...