javascript 如何改变预览的拖动图像的大小只拖动在Angular 材料拖放?

hmtdttj4  于 2023-10-14  发布在  Java
关注(0)|答案(2)|浏览(106)

我在Div元素中创建了一个图像。然后我为img元素设置了cdkdrag。我只想移动图像而不是div,这就是我把cdkdrag作为图像标签的原因。
但现在的问题是,如果我去改变宽度和高度的**.cdk-drag-preview**类,我可以看到图像是小的时候拖动,但当我移动该图像鼠标指针是不是在图像它旁边的图像。为什么会发生这种情况,如何解决这个问题。
图像应该是一个大小之前拖动,但当我开始拖动它应该是小的。

.cdk-drag-preview {
  width: 50px !important;
  height: 50px !important;
}

以下是我的jsFiddle:fiddle

3gtaxfhh

3gtaxfhh1#

你可以在一个变量中存储鼠标按下时的偏移量,

offset:any=null

  setStyle(event: MouseEvent) {
    const rect = (event.target as HTMLElement).getBoundingClientRect();
    this.offset={x:event.offsetX*50/rect.width,y:event.offsetY*50/rect.height };
  }
  public onDragMove(event: CdkDragMove<any>): void {
    const el=(document.getElementsByClassName('cdk-drag-preview')[0])as any
    const xPos = event.pointerPosition.x - this.offset.x;
    const yPos = event.pointerPosition.y - this.offset.y;
    el.style.transform = `translate3d(${xPos}px, ${yPos}px, 0)`;
  }

的.html

<div class="dragItem"  >
  <img cdkDrag  src="..."
       (mousedown)="setStyle($event)" 
       (cdkDragMoved)="onDragMove($event)"
  />
</div>

注意:请注意,我从外部div中删除了de cdkDrag

olmpazwi

olmpazwi2#

使用cdkDragPreview元素设置其内部的width和height属性。这将创建一个新的元素,该元素仅在拖动过程中出现,不会影响原始元素的大小。

<div class="container">
  <div cdkDragBoundary>
    <!-- Original -->
    <img cdkDrag src="image.jpg">
    <div class="item">Item to drag</div>
  </div>
  <!-- Preview -->
  <div cdkDragPreview>
    <img src="image.jpg" class="preview-image">
  </div>
</div>

根据您的需要调整样式:

.cdk-drag-preview {
  /* No need width or height */
}

.cdkDragPreview .preview-image {
  width: 50px;
  height: 50px;
}

.container {
  display: flex;
  justify-content: space-between;
  align-items: center;
  width: 500px;
}

.item {
  width: 200px;
  height: 200px;
}

现在预览元素与较小的图像大小,而拖动,但原始。元素保持相同的大小。

相关问题