*cdkDragPreview Позиционирование углового материала

Можно ли изменить положение при использовании *cdkDragPreview при перетаскивании элемента? Прямо сейчас стиль, который я делал при перетаскивании, появляется всегда внизу справа от курсора. Я хотел бы разместить его в верхнем левом углу.

Любая помощь в получении этого в положении?:)

0 ответов

Да, вы можете подписаться на cdkDragMoved и сместить свой *cdkDragPreview.

пример

В следующем примере ваш предварительный просмотр будет смещен на 100 пикселей по осям x и y.

<div cdkDrag
    [id]="storageNode.barcode"
    [cdkDragData]="storageNode"
    [cdkDragDisabled]="dragDisabled"
    (cdkDragMoved)="onDragMove($event)">
    <div title="Drag this entity and its children"
        class="entity-drag-handle"
        cdkDragHandle>

        {{storageNode.barcode}}
        <mat-icon *ngIf="!dragDisabled">
        drag_indicator
        </mat-icon>
    </div>
    <div
      [id]="storageNode.barcode + 'preview'"
      [ngStyle]="{'background-color': this.getBackgroundColor(0.6)}"
      class="entity-drag-preview"
      *cdkDragPreview>
         <h4>{{storageNode.barcode}}</h4>
         <p>{{formattedDescription}}</p>
    </div>
</div>

имейте в виду, что здесь используются функции машинописного текста 3.7, которые не будут работать в более старых версиях

public onDragMove(event: CdkDragMove<StorageEntity>): void {
    const nodeMovePreview = new ElementRef<HTMLElement>(document.getElementById(this.storageNode.barcode + 'preview'));
    const xPos = event.pointerPosition.x - 100;
    const yPos = event.pointerPosition.y - 100;
    if (nodeMovePreview?.nativeElement) {
        nodeMovePreview.nativeElement.style.transform = `translate3d(${xPos}px, ${yPos}px, 0)`;
    }
}

[HTML]

<div
    cdkDrag
    (cdkDragReleased)="cdkDragReleased($event, i)"
    (cdkDragDropped)="cdkDragDropped($event)">

 <div class="my-placeholder" *cdkDragPlaceholder></div>

 <div class="my-preview" *cdkDragPreview></div>

</div>

[CSS]

.my-placeholder {
  background-color: #000;
}
.my-preview {
   transform: scale(0.7) translate(-200px, -100px);
}

Я использовал translate в.my-preview, чтобы разместить элемент как по оси X, так и по оси Y, затем масштаб используется для уменьшения, чтобы он выглядел меньше

Другие вопросы по тегам