如何使用自动滚动功能 vue-draggable

Kat*_*ink 6 vue.js sortablejs vuejs2 vuedraggable

我正在尝试将 vue-draggable ( https://github.com/SortableJS/Vue.Draggable ) 用于大量嵌套项目(组织树)。

由于有大量数据,用户需要能够在拖动时滚动。

据说支持 sortable.js 中的所有选项,但我不知道应该如何实现“自动滚动”。 https://github.com/SortableJS/Sortable/tree/master/plugins/AutoScroll

我试过:

    import draggable from "vuedraggable";
    import { Sortable, AutoScroll } from 'sortablejs';

    Sortable.mount(new AutoScroll());
Run Code Online (Sandbox Code Playgroud)

并在模板中:

    <draggable class="dragArea"
           tag="ul"
           :list="nodes"
           :group="{ name: 'g1' }"
           :scroll-sensitivity="250"
>
    <li class="drag rij" v-for="el in nodes" :key="el.id"
        {{ el.code }}
    </li>
</draggable>
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

_sortablejs.AutoScroll is not a constructor
Run Code Online (Sandbox Code Playgroud)

Ara*_*ker 14

我意识到这现在已经很老了,但我遇到了同样的问题。正如所指出的,默认情况下自动滚动确实是开启的。但它似乎不是开箱即用的。对我来说,它有两个部分:

  1. 我的页眉和页脚是悬停在页面上方的固定元素,因此自动滚动仅在接近页面边框时启动,而不是元素的边框

这可以通过增加自动滚动灵敏度来解决,您已经这样做了:

<draggable [...]
           :scroll-sensitivity="200"
>
Run Code Online (Sandbox Code Playgroud)
  1. 似乎 HTML 5 的默认拖放行为会干扰自动滚动功能。

这就像将forceFallback属性绑定到可拖动对象一样简单:

<draggable [...]
           :force-fallback="true"
>
Run Code Online (Sandbox Code Playgroud)

这当然也可以通过绑定 dragOptions 来完成,这会大量清理您的模板代码:

<draggable class="dragArea"
           tag="ul"
           v-bind="dragOptions"
>
Run Code Online (Sandbox Code Playgroud)

并添加计算或数据属性dragOptions

  computed: {
    dragOptions() {
      return {
        group: {
          name: 'g1'
        },
        scrollSensitivity: 200,
        forceFallback: true
      };
    }
  }
Run Code Online (Sandbox Code Playgroud)

滚动并不像我希望的那么漂亮,但这可能只是我打开的标签数量。

  • 对我来说,设置 :force-fallback="true" 会导致可拖动组件整体表现得很奇怪,如果我设置此选项,我将无法添加多个项目 (3认同)