Vue,可拖拽组件Vue,Smooth,DnD的使用详解
admin
2023-05-02 13:20:01
目录

      简介和 Demo 展示

      最近需要有个拖拽列表的需求,发现一个简单好用的 Vue 可拖拽组件。安利一下~

      Vue Smooth DnD 是一个快速、轻量级的拖放、可排序的 Vue.js 库,封装了 smooth-dnd 库。

      Vue Smooth DnD 主要包含了两个组件,ContainerDraggableContainer 包含可拖动的元素或组件,它的每一个子元素都应该被 Draggable 包裹。每一个要被设置为可拖动的元素都需要被 Draggable 包裹。

      安装: npm i vue-smooth-dnd

      一个简单的 Demo ,展示组件的基础用法,实现了可以拖拽的列表。

      
      
      
      
      

      效果

      API: Container

      属性

      属性 类型 默认值 描述
      :orientation string vertical 容器的方向,可以为 horizontal 或 vertical
      :behaviour string move 描述被拖动的元素被移动或复制到目标容器。 可以为 move 或 copy 或 drop-zone 或 contain 。move 可以在容器间互相移动,copy 是可以将元素复制到其他容器,但本容器内元素不可变,drop-zone 可以在容器间移动,但是容器内元素的顺序是固定的。contain 只能在容器内移动。
      :tag string, NodeDescription p 容器的元素标签,默认是 p ,可以是字符串如 tag="table" 也可以是包含 value和 props 属性的对象 :tag="{value: 'table', props: {class: 'my-table'}}"
      :group-name string undefined 可拖动元素可以在具有相同组名的容器之间移动。如果未设置组名容器将不接受来自外部的元素。 这种行为可以被 shouldAcceptDrop 函数覆盖。 见下文。
      :lock-axis string undefined 锁定拖动的移动轴。可用值 x, y 或 undefined。
      :drag-handle-selector string undefined 用于指定可以开启拖拽的 CSS 选择器,如果不指定的话则元素内部任意位置都可抓取。
      :non-drag-area-selector string undefined 禁止拖动的 CSS 选择器,优先于 dragHandleSelector.
      :drag-begin-delay number 0(触控设备为 200) 单位毫秒。表示点击元素持续多久后可以开始拖动。在此之前移动光标超过 5px 将取消拖动。
      :animation-duration number 250 单位毫秒。表示放置元素和重新排序的动画持续时间。
      :auto-scroll-enabled boolean true 如果拖动项目接近边界,第一个可滚动父项将自动滚动。(这个属性没看懂= =)
      :drag-class string undefined 元素被拖动中的添加的类(不会影响拖拽结束后元素的显示)。
      :drop-class string undefined 从拖拽元素被放置到被添加到页面过程中添加的类。
      :remove-on-drop-out boolean undefined 如果设置为 true,在被拖拽元素没有被放置到任何相关容器时,使用元素索引作为 removedIndex 调用 onDrop()
      :drop-placeholder boolean,object undefined 占位符的选项。包含 className, animationDuration, showOnTop

      关于 drag-classdrop-classdrop-placeholder.className 的效果演示

      
          
          ....
      

      类对应样式

      .card-ghost {
          transition: transform 0.18s ease;
          transform: rotateZ(35deg);
          background: red !important;
      }
      .card-ghost-drop {
          transition: transform 1s cubic-bezier(0,1.43,.62,1.56);
          transform: rotateZ(0deg);
          background: green !important;
      }
      .drop-preview {
          border: 1px dashed #abc;
          margin: 5px;
          background: yellow !important;
      }

      实际效果(我这优秀的配色啊)

      生命周期

      一次拖动的生命周期通过一系列回调和事件进行描述和控制,下面以包含 3 个容器的示例为例进行说明
      (直接复制了文档没有翻译,API 详细解释可以看后面介绍。):

      Mouse     Calls  Callback / Event       Parameters              Notes
      
      down   o                                                        Initial click
      
      move   o                                                        Initial drag
             |
             |         get-child-payload()    index                   Function should return payload
             |
             |   3 x   should-accept-drop()   srcOptions, payload     Fired for all containers
             |
             |   3 x   drag-start             dragResult              Fired for all containers
             |
             |         drag-enter
             v
      
      move   o                                                        Drag over containers
             |
             |   n x   drag-leave                                     Fired as draggable leaves container
             |   n x   drag-enter                                     Fired as draggable enters container
             v
      
      up     o                                                        Finish drag
      
                       should-animate-drop()  srcOptions, payload     Fires once for dropped container
      
                 3 x   drag-end               dragResult              Fired for all containers
      
                 n x   drop                   dropResult              Fired only for droppable containers

      请注意,应在每次 drag-start 之前和每次 drag-end 之前触发 should-accept-drop,但为了清晰起见,此处已省略。

      其中 dragResult 参数的格式:

      dragResult: {
          payload,        # 负载 可以理解为用来记录被拖动的对象
          isSource,       # 是否是被拖动的容器本身
          willAcceptDrop, # 是否可以被放置
      }

      其中 dropResult 参数的格式:

      dropResult: {
          addedIndex,     # 被放置的新添加元素的下标,没有则为 null
          removedIndex,   # 将被移除的元素下标,没有则为 null
          payload,        # 拖动的元素对象,可通过 getChildPayload 指定
          droppedElement, # 放置的 DOM 元素
      }

      回调

      回调在用户交互之前和期间提供了额外的逻辑和检查。

      事件

      API: Draggable

      tag

      同容器的 tag 指定可拖拽元素的 DOM 元素标签。

      实战

      实现一个简单的团队协作任务管理器。

      
      
      
      
      
      

      效果

      到此这篇关于Vue 可拖拽组件Vue Smooth DnD的使用详解的文章就介绍到这了,更多相关Vue 可拖拽组件内容请搜索趣讯吧以前的文章或继续浏览下面的相关文章希望大家以后多多支持趣讯吧!

      相关内容

      热门资讯

      北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
      苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
      长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
      demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
      世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
      长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
      脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
      猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
      北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
      苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
      世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
      应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
      阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
      脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
      demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
      北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
      苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...