RXJS拖放onDrop/onDragOver

RXJS拖放onDrop/onDragOver,rxjs,Rxjs,我试图使用RXJS进行拖放 有人知道如何使用RXJS正确地进行onDrop或onDragOver吗 这是我试过的。但是不工作 let mouseup = Observable.fromEvent(document, 'mouseup'); let mousemove = Observable.fromEvent(document, 'mousemove'); let mousedown = Observable.fromEvent(target,

我试图使用RXJS进行拖放

有人知道如何使用RXJS正确地进行onDrop或onDragOver吗

这是我试过的。但是不工作

let mouseup = Observable.fromEvent(document, 'mouseup');
            let mousemove = Observable.fromEvent(document, 'mousemove');
            let mousedown = Observable.fromEvent(target, 'mousedown');
const drop = mousedown
                .flatMap((md) => {
                    return Observable
                        .concat(
                        [
                            mousemove.take(1).ignoreElements(),
                            mouseup.take(1)
                        ]
                        );
                });
这里是另一个尝试,它似乎是有效的。但它会在鼠标移动时开火,而不仅仅是在拖动后开火

const drop = mousemove
                .switchMap((mm) => mouseup.take(1));

如果你想拥有所有的拖动事件,你可以在这里使用它

let up$   = Observable.fromEvent(document, 'mouseup');
let move$ = Observable.fromEvent(document, 'mousemove');
let down$ = Observable.fromEvent(document, 'mousedown');

let drag$ = down$.switchMap(down => move$.takeUntil(up$));
这将发出“拖动”时触发的每个mousemove事件

它也很容易适应你的需要。假设您需要拖动的x距离:

let distance$ = down$.switchMap((down: MouseEvent) => 
                          move$.map((move: MouseEvent) => (move.clientX - down.clientX))
                      .takeUntil(up$));
你想要同样的,但也支持触摸吗?没问题!只需将三个输入流与它们的触摸等价物合并,就可以了

我希望这能回答你的问题


我做了一些黑客攻击。让它工作起来。但也不确定这是否正确。仍然欢迎任何帖子或建议。谢谢