容器旋转时角度CDK拖放错误的拖动方向

时间:2020-11-01 01:50:07

标签: angular drag-and-drop angular-cdk-drag-drop

我正在对像游戏这样的棋子进行拖放操作,一切工作正常……直到棋盘旋转,然后所有dnd和实现都被破坏了:当我将一块拖到顶部时,该块会落到底部,当向左拖动时,将向右移动。

问题的样本代码 https://stackblitz.com/edit/angular-h3xixz?file=src%2Fstyles.scss

这是css的碎片,破坏了dnd的行为,但是我确实需要在游戏中旋转板子。

.basic-container {
  padding: 30px;
  transform: rotate(180deg);
}

我不想放弃@ angular / cdk实现,但是也许我别无选择,我会发疯了。

更新

为了更清楚地说明这个问题,我附上一个带有动画的示例来旋转容器。我已经有一个解决方法,我将在答案中分享。

https://stackblitz.com/edit/angular-h3xixz-2t148v

2 个答案:

答案 0 :(得分:1)

而不是在CSS中使用转换,而是在HTML中使用这种方式-

<div class="example-box" cdkDrag>
  <div style="transform:rotate(180deg)">
      Drag me around
  </div>
</div>

在您的CSS-

.basic-container {
  padding: 30px;
  
}

希望这行得通!

答案 1 :(得分:0)

好吧,我找到了解决方法,它覆盖了由Angular CDK库处理的本机HTML元素的属性 style.transform ,基本上,我更改了转换符号以恢复它,乘以-1。

我的解决方法如下:

dragMoved(ev: CdkDragMove) {
  if (this.isRotated) {
    const [origX, origY] = this.elementRef.nativeElement.firstChild.style.transform.match(/-*\d+px/g);
    const newX = parseInt(origX, 10) * -1;
    const newY = parseInt(origY, 10) * -1;

    this.elementRef.nativeElement.firstChild.style.transform = `translate3d(${newX}px, ${newY}px, 0px)`;
  }
}