使用 @angular/cdk/drag-drop 中的 cdkDragFreeDragPosition 平滑移动到 x 和 y 位置

Smooth move to x and y position with cdkDragFreeDragPosition in @angular/cdk/drag-drop

我正在使用 Angular10 创建一个实时系统,其中用户 1 在屏幕上拖动项目,项目的位置在用户 2 屏幕上更新。我为此使用 @angular/cdk/drag-drop

我正在更新用户 2 屏幕上的位置,方法是将 cdkDragFreeDragPosition 绑定到对象的 xPosyPos 属性,这些属性在用户 1 删除对象时更新:

[cdkDragFreeDragPosition]="{x: wsc.xPos, y: wsc.yPos}"

这可行,但是用户 2 的对象的位置跳跃而不是平滑地移动到有点难看的新位置。

请问有没有办法让用户 2 屏幕上的对象从初始位置平滑移动到新位置?

根据 docs,这可以通过简单地将 transition 添加到 .cdk-drag class.

来实现

但是,这也会影响框的“手动”拖动 - 在用户拖动框时会产生某种“延迟”。所以你要排除.cdk-drag-dragging class,它被添加到当前正在拖动的元素中:

.cdk-drag:not(.cdk-drag-dragging) {
  transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
}

当然,在其他一些情况下,您可能希望根据您的用例包含/排除其他 classes,但这应该能为您提供基本思路。