blob: f6f1b6f331eb696d940577a932f46b5bb18ca850 [file] [log] [blame]
import 'dart:html';
import 'package:rxdart/rxdart.dart';
// Side note: To maintain readability, this example was not formatted using dart_fmt.
void main() {
final dragTarget = querySelector('#dragTarget');
final mouseUp = new Observable<MouseEvent>(document.onMouseUp);
final mouseMove = new Observable<MouseEvent>(document.onMouseMove);
final mouseDown = new Observable<MouseEvent>(document.onMouseDown);
mouseDown
// Use map() to calculate the left and top properties on mouseDown
.map((event) => new Point<num>(event.client.x - dragTarget.offset.left,
event.client.y - dragTarget.offset.top))
// Use switchMap() to get the mouse position on each mouseMove
.switchMap((startPosition) {
return mouseMove
// Use map() to calculate the left and top properties on each mouseMove
.map((event) => new Point<num>(
event.client.x - startPosition.x, event.client.y - startPosition.y))
// Use takeUntil() to stop calculations when a mouseUp occurs
.takeUntil(mouseUp);
})
// Use listen() to update the position of the dragTarget
.listen((position) {
dragTarget.style.left = '${position.x}px';
dragTarget.style.top = '${position.y}px';
});
}