Announcement

👇Official Account👇

图片

Welcome to join the group & private message

Article first/tail QR code

Skip to content

拖放实现实战

使用 RxJS 可以优雅地实现拖放功能。

示例

typescript
import { fromEvent } from 'rxjs';
import { switchMap, takeUntil, map } from 'rxjs/operators';

const draggable = document.getElementById('draggable');

const mouseDown$ = fromEvent(draggable, 'mousedown');
const mouseMove$ = fromEvent(document, 'mousemove');
const mouseUp$ = fromEvent(document, 'mouseup');

const drag$ = mouseDown$.pipe(
  switchMap((startEvent: MouseEvent) => {
    const startX = startEvent.clientX;
    const startY = startEvent.clientY;
    
    return mouseMove$.pipe(
      map((moveEvent: MouseEvent) => ({
        x: moveEvent.clientX - startX,
        y: moveEvent.clientY - startY
      })),
      takeUntil(mouseUp$)
    );
  })
);

drag$.subscribe(({ x, y }) => {
  draggable.style.transform = `translate(${x}px, ${y}px)`;
});

上次更新于: