Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vue Draggable #79

Open
kekobin opened this issue Jun 2, 2020 · 0 comments
Open

Vue Draggable #79

kekobin opened this issue Jun 2, 2020 · 0 comments

Comments

@kekobin
Copy link
Owner

kekobin commented Jun 2, 2020

Vue Draggable 是一个实现拖拽功能的 Vue 组件,是基于Sortable基本库实现的。

基础用法

import draggable from 'vuedraggable'
// 定义一个json串 list,实现它的拖拽排序。
<draggable v-model="list">
    <transition-group>
        <div v-for="element in list" :key="element.id">
            {{element.name}}
        </div>
    </transition-group>
</draggable>

属性

  • 这里的value一般直接使用v-model替代
  • 这里的options由下面的 v-bind 取代了
    image

v-bind配置项
image
image

事件
image

插槽

  • 页眉或页脚插槽都不能与 tarnstion-group 一起使用。

Header
使用标题插槽在vuedraggable组件中添加不可拖动的元素。它应该与draggable选项一起使用来标记draggable元素。请注意,无论标题槽在模板中的位置如何,它总是被添加到默认槽之前。

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

Footer
使用页脚槽在vuedraggable组件中添加不可拖动的元素。它应该与draggable选项一起使用,以标记draggable元素。请注意,无论页脚槽在模板中的位置如何,它都将始终添加到默认槽之后。

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

克隆
克隆A中的模块到B,反过来不行

A draggable:    
<draggabl :group="{name: 'group', pull: 'clone', put: false}"></draggable>
B draggable:    
<draggabl group="group"></draggable>

还可以自定义克隆过去的数据:

<draggabl :group="{name: 'group', pull: 'clone', put: false}" :clone="cloneDog"></draggable>

methods: {
    cloneDog(row) {
      return {
        id: idGlobal++,
        name: `cat ${row.id}`
      };
    }
 }

上面的是可以和别的组相互拖拽,本身列表之间也可以拖拽,如果只想和别的组交互,而本身限制拖拽,可用:

<draggabl v-bind="{group:{ name:'comp', pull:'clone',put:false},sort:false, ghostClass: 'ghost'}"></draggable>

v-bind 绑定 draggable 组件的配置项,可以看看具体讲解:

group:string or object
string:命名,用处是为了设置可以拖放容器时使用
object: {name, pull, put}
name: 同 string 的方法
pull:pull 用来定义从这个列表容器移动出去的设置,true/false/'clone'/function
	true:列表容器内的列表元素可以被移出;
	false:列表容器内的列表元素不可以被移出;
	clone:列表元素移出,移动的为该元素的副本;
function:用来进行 pull 的函数判断,可以进行复杂逻辑,在函数中 return false/true 来判断是否移出;
put:put 用来定义往这个列表容器放置列表元素的的设置,true/false/['foo','bar']/function
	true:列表容器可以从其他列表容器内放入列表元素;
	false:与 true 相反;
	['foo','bar']:这个可以是一个字符串或者是字符串的数组,代表的是 group 配置项里定义的 name 值;
	function:用来进行 put 的函数判断,可以进行复杂逻辑,在函数中 return false/true 来判断是否放入
animation: number 单位:ms,定义动画的时间;
disabled: boolean 定义此 sortable 对象是否可用,为 true 时 sortable 对象不能拖放排序等功能,为 false 时为可以进行排序,相当于一个开关;
ghostClass:selector 格式为简单 css 选择器的字符串,当拖动列表元素时会生成一个副本作为影子元素来模拟被拖动元素排序的情况,此配置项就是来给这个影子元素添加一个 class,我们可以通过这种方式来给影子元素进行编辑样式;
sort: boolean 定义是否列表元素是否可以在列表容器内进行拖拽排序;
delay: number 定义鼠标选中列表元素可以开始拖动的延迟时间;
handle: selector 格式为简单 css 选择器的字符串,使列表元素中符合选择器的元素成为拖动的手柄,只有按住拖动手柄才能使列表元素进行拖动;
filter: selector 格式为简单 css 选择器的字符串,定义哪些列表元素不能进行拖放,可设置为多个选择器,中间用“,”分隔
draggable:selector 格式为简单 css 选择器的字符串,定义哪些列表元素可以进行拖放
chosenClass:selector 格式为简单 css 选择器的字符串,当选中列表元素时会给该元素增加一个 class;
forceFallback:boolean 如果设置为 true 时,将不使用原生的 html5 的拖放,可以修改一些拖放中元素的样式等;
fallbackClass:string 当 forceFallback 设置为 true 时,拖放过程中鼠标附着元素的样式;
scroll:boolean 默认为 true,当排序的容器是个可滚动的区域,拖放可以引起区域滚动。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant