Rxjs 과정 예제에서 끌어서 놓기 구현을 만들려고했지만 제대로 작동하지 않습니다. 언젠가는 상자가 원래의 위치로 다시 드래그되어 몇 번 붙어 있습니다. 나는 withLatestFrom 연산자를 제거하면Rxjs를 사용하여 끌어서 놓기가 작동하지 않습니다.
var $drag = $('#drag');
var $document = $(document);
var $dropAreas = $('.drop-area');
var beginDrag$ = Rx.Observable.fromEvent($drag, 'mousedown');
var endDrag$ = Rx.Observable.fromEvent($document, 'mouseup');
var mouseMove$ = Rx.Observable.fromEvent($document, 'mousemove');
var currentOverArea$ = Rx.Observable.merge(
Rx.Observable.fromEvent($dropAreas, 'mouseover').map(e => $(e.target)),
Rx.Observable.fromEvent($dropAreas, 'mouseout').map(e => null)
);
var drops$ = beginDrag$
.do(e => {
e.preventDefault();
$drag.addClass('dragging');
})
.mergeMap(startEvent => {
return mouseMove$
.takeUntil(endDrag$)
.do(moveEvent => moveDrag(startEvent, moveEvent))
.last()
.withLatestFrom(currentOverArea$, (_, $area) => $area);
})
.do(() => {
$drag.removeClass('dragging')
.animate({top: 0, left: 0}, 250);
})
.subscribe($dropArea => {
$dropAreas.removeClass('dropped');
if($dropArea) $dropArea.addClass('dropped');
});
function moveDrag(startEvent, moveEvent) {
$drag.css(
{left: moveEvent.clientX - startEvent.offsetX,
top: moveEvent.clientY - startEvent.offsetY}
);
}
는 다음 DIV의 드래그 항상 잘 작동하지만,이없이 내가 드롭 기능을 구현받을 수 없습니다 : 여기 https://plnkr.co/edit/9Nqx5qiLVwsOV7zU6Diw?p=preview
JS의 코드 plunkr에게 있습니다.