How to implement a mousedragstart Observable using the Drag and Drop RxJs\'s example.
mousedragstart should be emit before the first
An alternative solution for drag and drop:
let dragDiv = document.getElementById('drag');
let mouseisdown = false;
let startPos;
Observable.fromEvent(dragDiv, "mousedown").subscribe((e) => {
mouseisdown = true;
startPos = { x: e.offsetX, y: e.offsetY}
});
Observable.fromEvent(document, "mouseup").subscribe(e => mouseisdown = false);
Observable
.fromEvent(document, "mousemove")
.filter(e => mouseisdown)
.map((e) => {
return {
left: e.clientX - startPos.x,
top: e.clientY - startPos.y
}
})
.subscribe( p => {
dragDiv.style.top = p.top + "px";
dragDiv.style.left = p.left + "px";
});
The typescript version:
let dragDiv = document.getElementById('drag');
let mouseisdown = false;
let startPos;
Observable.fromEvent(dragDiv, "mousedown").subscribe((e:MouseEvent) => {
mouseisdown = true;
startPos = { x: e.offsetX, y: e.offsetY}
});
Observable.fromEvent(document, "mouseup").subscribe(e => mouseisdown = false);
Observable
.fromEvent(document, "mousemove")
.filter(e => mouseisdown)
.map((e:MouseEvent) => {
return {
left: e.clientX - startPos.x,
top: e.clientY - startPos.y
}
})
.subscribe( p => {
dragDiv.style.top = p.top + "px";
dragDiv.style.left = p.left + "px";
});