다음 예제에서 RxJS on GitHub의 다음 예에서 마우스 이동이 관찰 가능 '활성화 됨'인 경우, mousemove 이벤트 샘플링을 시작하는 트리거는 무엇입니까?반응식에서 뜨거운 관찰 가능한 시퀀스를 시작하는 것
나는 subscribe가 mousedrag의 모든 observables에 대한 시퀀스의 시작을 표시한다고 생각했지만 그럴 듯하지는 않습니다. 분명히 mousedown 전에 mousemove 이벤트가 있지만 이러한 이벤트는 사용되지 않습니다.
var dragTarget = document.getElementById('dragTarget');
// Get the three major events
var mouseup = Rx.Observable.fromEvent(dragTarget, 'mouseup');
var mousemove = Rx.Observable.fromEvent(document, 'mousemove');
var mousedown = Rx.Observable.fromEvent(dragTarget, 'mousedown');
var mousedrag = mousedown.flatMap(function (md) {
// calculate offsets when mouse down
var startX = md.offsetX, startY = md.offsetY;
// Calculate delta with mousemove until mouseup
return mousemove.map(function (mm) {
mm.preventDefault();
return {
left: mm.clientX - startX,
top: mm.clientY - startY
};
}).takeUntil(mouseup);
});
// Update position
var subscription = mousedrag.subscribe(function (pos) {
dragTarget.style.top = pos.top + 'px';
dragTarget.style.left = pos.left + 'px';
});
어떤 통찰력도 인정 될 것입니다.
감사합니다. 당신은 분명히 내가 가진 많은 질문을 분명히 대답했습니다. 나는 당신이 말한 것에 대해 아직도 혼란 스럽다. ".map 체인의 끝에서 호출되는 .takeUntil (mouseup) 메서드는 모든 것이 정리되고 삭제되는 곳입니다. 해당 관찰 가능 항목에 대한 onNext는 이전 구독을 처리합니다." 구독은 takeUntil 이벤트가 발생하면 처리되는 것으로 보이지만 컴포지션을 다시 시작한 것처럼 보입니다 (어느 것이 나에게 괜찮은지). 이 프로세스를 확장 할 수 있습니까? – bnieland
나는 또한 당신이 관심을 갖거나 도움을 줄 수있는 좋은 바이올린과 관련된 다른 질문을 가지고있다 : http://stackoverflow.com/questions/24598299/how-to-cancel-a-composed-rxjs- 관측 가능/24600950 # 24600950 – bnieland