Начал использовать RxJs. Не могу найти способ обойти эту проблему. У меня есть перетаскиваемый элемент управления:
startDrag = rx.Observable.fromEvent(myElem,'mousedown')
теперь, поскольку элемент управления слишком мал, события mousemove
и mouseup
должны быть на уровне документа (иначе он не остановит перетаскивание, если курсор не находится точно на элементе)
endDrag = rx.Observable.fromEvent document,'mouseup'
position = startDrag.flatMap ->
rx.Observable.fromEvent document,'mousemove'
.map (x)-> x.clientX
.takeUntil endDrag
теперь, как мне "поймать" нужный момент, когда его больше не тянут (mouseup
). вы видите проблему с подпиской на endDrag
? Он будет срабатывать при каждом щелчке в любом месте, а не только myElem
Как проверить все 3 свойства одновременно? Он должен принимать только те document.mouseups, которые произошли точно после startDrag
и position
Обновление: я имею в виду, что проблема не в перемещении элемента. Эта часть проста - подпишитесь на position
, измените css элемента. Моя проблема в том, что мне нужно определить момент mouseup
и узнать точный элемент, который был перетащен (на странице несколько элементов). Как это сделать я понятия не имею.
takeUntil()
внутриflatMap
вместоflatMap
, чтобы он применялся к отдельным перетаскиваниям, а не к общему наблюдаемому 12.02.2015