Можно изменять размер только перетаскиванием сверху и кнопкой сброса

#html #css #angular #drag #resizable

Вопрос:

У меня есть контейнер, поверх контейнера у меня есть строка, по которой перетаскиваем сверху.

но, согласно моему коду, перетаскивание сверху не работает, высота контейнера не увеличивается.

я ссылаюсь на эту ссылку — https://stackblitz.com/edit/ngx-cdk-drag-resize

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

Я хочу создать кнопку сброса — при нажатии кнопки контейнер должен быть в исходном состоянии или по высоте и ширине.

Код —

 <div [style.height.px]="height"  #resizeBox style="position: relative;">
        <ng-content  ></ng-content>

        <span
        #dragHandleTop
        class="dragHandletop top"
        cdkDrag
        (cdkDragMoved)="dragMove(dragHandleTop, $event)"></span>

    </div>
 

CSS

 .dragHandletop.top {
  height: 2px;
  width: 100%;
  cursor: ns-resize;
}
.dragHandletop {
  position: absolute;
  background-color: palevioletred;
  z-index: 9;
}
 

Угловой Код Ts —

   @ViewChild('resizeBox') resizeBox: ElementRef;
  @ViewChild('dragHandleCorner') dragHandleCorner: ElementRef;
  @ViewChild('dragHandleRight') dragHandleRight: ElementRef;
  @ViewChild('dragHandleBottom') dragHandleBottom: ElementRef;

  @ViewChild('dragHandleTop') dragHandleTop: ElementRef;

  drawerHide = false;
  status = false;
  height;

  get resizeBoxElement(): HTMLElement {
    return this.resizeBox.nativeElement;
  }

  get dragHandleCornerElement(): HTMLElement {
    return this.dragHandleCorner.nativeElement;
  }

  get dragHandleRightElement(): HTMLElement {
    return this.dragHandleRight.nativeElement;
  }

  get dragHandleBottomElement(): HTMLElement {
    return this.dragHandleBottom.nativeElement;
  }

  get dragHandleTopElement(): HTMLElement {
    return this.dragHandleTop.nativeElement;
  }

  constructor(private ngZone: NgZone) {}

  ngAfterViewInit() {
    this.setAllHandleTransform();
  }

  setAllHandleTransform() {
    const rect = this.resizeBoxElement.getBoundingClientRect();
    console.log(rect);
    // this.setHandleTransform(this.dragHandleCornerElement, rect, 'both');
    // this.setHandleTransform(this.dragHandleRightElement, rect, 'x');
    // this.setHandleTransform(this.dragHandleBottomElement, rect, 'y');
    this.setHandleTransform(this.dragHandleTopElement, rect, 'y');
  }

  setHandleTransform(
    dragHandle: HTMLElement,
    targetRect: ClientRect | DOMRect,
    position: 'x' | 'y' | 'both'
  ) {
    const dragRect = dragHandle.getBoundingClientRect();

    const translateX = targetRect.width - dragRect.width;
    const translateY = targetRect.height - dragRect.height;

    if (position === 'x') {
      dragHandle.style.transform = `translate(${translateX}px, 0)`;
    }

    if (position === 'y') {
      dragHandle.style.transform = `translate(0, ${translateY}px)`;
    }

    if (position === 'both') {
      dragHandle.style.transform = `translate(${translateX}px, ${translateY}px)`;
    }
  }

  dragMove(dragHandle: HTMLElement, $event: CdkDragMove<any>) {
    this.ngZone.runOutsideAngular(() => {
      this.resize(dragHandle, this.resizeBoxElement);
    });
  }

  resize(dragHandle: HTMLElement, target: HTMLElement) {
    const dragRect = dragHandle.getBoundingClientRect();
    const targetRect = target.getBoundingClientRect();

    const width = dragRect.left - targetRect.left   dragRect.width;
    const height = dragRect.top - targetRect.top   dragRect.height;

    target.style.width = width   'px';
    target.style.height = height   'px';

    this.setAllHandleTransform();
  }