mwlDraggable(拖放)-最小移动长度

时间:2019-03-28 16:39:20

标签: html angular

我在垫纸上有问题,可以拖动并包含一些按钮。不幸的是,在我的PC按钮(单击)上根本不起作用,在我的同事上,它有时可以工作。我们认为,这可能是因为点击被视为拖动元素。无论如何,有没有设置最小移动(拖动)长度,这导致开始将对象视为已移动?

它已在两台机器上进行了测试-相同的代码,不同的行为-从未执行过一个按钮(单击),有时是第二个。

我现在在计算机上发现的东西-在调试(Chrome)时-在发生这种情况之一的情况下将鼠标光标移到卡上时-我从调试器上看到整个应用程序的蓝色“阴影”,但是按钮是可点击的-符合我的预期,否则-不能。

<mat-card mwlDraggable *ngFor="let item of items; let i = index" [dragActiveClass]="'field-dragged'"
[dropData]="item" (dragEnd)="itemFieldDragEnd($event, item)">
<mat-card-content>
   <div class="pull-left m-t-5">
      {{item.name}}
      <div class="field-meta truncate">
         {{item.desc}}
      </div>
   </div>
   <div class="pull-right">
      <button mat-icon-button (click)="onItemFieldClick($event, item)" matTooltip="somehint">
         <mat-icon class="md-24">arrow_forward_ios</mat-icon>
      </button>
   </div>
</mat-card-content>
</mat-card>

我想获得一种方法来强制mwlDraggable变为可拖动状态,除非它真的被移动了10px,而不是之前。或任何其他可以解决该问题的解决方案。

1 个答案:

答案 0 :(得分:0)

我在github上找到了解决方案:https://github.com/mattlewis92/angular-draggable-droppable/issues/53

使用以上示例性的完全实现的解决方案:

<mat-card mwlDraggable *ngFor="let item of items; let i = index" [dragActiveClass]="'field-dragged'"
[dropData]="item" (dragEnd)="itemFieldDragEnd($event, item)"
[validateDrag]="dragThresholdValidator">
<mat-card-content>
   <div class="pull-left m-t-5">
      {{item.name}}
      <div class="field-meta truncate">
         {{item.desc}}
      </div>
   </div>
   <div class="pull-right">
      <button mat-icon-button (click)="onItemFieldClick($event, item)" matTooltip="somehint">
         <mat-icon class="md-24">arrow_forward_ios</mat-icon>
      </button>
   </div>
</mat-card-content>
</mat-card>

public dragThresholdValidator({ x, y }: any): boolean {
    const min_drag_threshold = 5;
    return Math.abs(x) > min_drag_threshold || Math.abs(y) > min_drag_threshold;
}