【问题标题】:Vue.Draggable delete item by dragging into designated regionVue.Draggable 通过拖入指定区域删除项目
【发布时间】:2019-01-08 04:42:27
【问题描述】:

我一直把头撞在墙上试图弄清楚这一点。我通过 Sortable.js 库 repo here 找到了一个几乎正是我想要做的例子,但我无法使用 Vue.Draggable 实现它。

我的做法是添加一个与其余元素在同一 group 中的 <draggable/> 元素,并在其上侦听 @add 事件,然后从其列表中删除该拖动元素.

一个问题(也许)是我试图将“垃圾”按钮指定为删除区域,如果它引用相同的可拖动group,则该拖动元素将附加到按钮组并抛出整个用户界面。因此,非常重要的一点是有某种用户反馈(例如,当鼠标悬停在拖动元素上时,垃圾桶图标变为红色),但拖动的元素不应插入到按钮组中。

初始拖动状态

预期的删除操作

提前致谢!

【问题讨论】:

    标签: javascript vue.js draggable rubaxa-sortable vue.draggable


    【解决方案1】:

    让我们依次解决一些问题:

    如何让垃圾桶可拖动接受任何组

    解决办法是设置group属性的pullpush

      trashOptions: {
        group: {
          name: 'trash',
          draggable: '.dropitem',
          put: () => true,
          pull: false
        }
      }
    

    通过将put 设置为始终返回true 的函数,它将接受任何组。或者,您可以将其设置为包含您接受的组的数组。

    如何防止我的按钮在设置为可拖动区域时被弄乱

    最简单的方法是将插入的项目设置为display: none。您可以简单地隐藏您设置为draggable 属性的任何内容,或使用ghostClass 设置(根据the documentation)。

    如何向用户提供反馈?

    这个很棘手。 Draggable 不会在您正在使用的可拖动区域上设置类。但是,您可以使用智能 css 选择器来实现您想要的。首先我们定义一个页脚。

    <draggable v-model="trashZone" class="dropzone trashzone" :options="trashOptions">
      <div slot="footer" class="footer">Trash</div>
    </draggable>
    

    我们将这个绝对定位到放置区,并确保它覆盖整个事物。删除的元素现在将始终出现在页脚之前。这很棒,因为我们可以使用 next-selector (+) 来选择插入的 dropitem 之后的页脚,并应用不同的样式。在这种情况下,我们应用红色背景并将文本设为白色。

    .trashzone .footer {
      display: block;
      position: absolute;
      top: 0;
      right: 0;
      bottom: 0;
      left: 0;
    }
    
    .trashzone .dropitem + .footer {
      background: red;
      color: white;
    }
    

    codesandbox 上提供了完整的工作示例。

    【讨论】:

    • 这非常有用!有两件事不太对劲 – 1) 可能是由于 Vue 重新渲染,但是当一个元素被拖到垃圾区(我的垃圾按钮)时,父元素失去其悬停状态并且按钮组消失。可能是 CSS ...我会继续调查 2) 我认为我不能使用绝对 pos 背景来获取用户反馈。我更喜欢在按钮上进行某种类切换,只需更改 bg 颜色。我正在考虑尝试利用@start@change 事件。关于如何解决这个问题的任何建议?
    • 您可以通过在@start 上设置一个虚拟变量draggingtruefalse@end 上的false 来检测光标上何时有项目,然后可能在悬停时检测在可拖动的垃圾桶上。问题是,触摸事件可能会失败。我认为大多数(如果不是全部) Draggable 事件会在您放置项目时触发,如果您想要获得视觉反馈,则为时已晚。
    • 是的,实际上我最终几乎完全按照您的建议实现了它(使用 $emit 我可以创建条件类并通过 CSS 修改外观)但我无法弄清楚 :hover 部分它。如果我能取得一些进展,我会跟进。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多