因此,在下面来自GitHub 上 RxJS的示例中,鼠标移动可观察到的“激活”是什么时候,我的意思是,是什么触发它开始对 mousemove 事件进行采样?
我认为订阅将标记 mousedrag 中所有可观察对象的序列的开始,但似乎并非如此。显然,在 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';
});
任何见解将不胜感激。