rxjs - 如何在 RxJs 中获得可观察的按钮状态?
问题描述
我有以下可观察的:
mouseOver$ // fired when mouse enters button
mouseOut$ // fired when mouse leaves button
mouseDown$ // fired when mouse button is pressed (over button)
globalMouseUp$ // fired when mouse button is released (anywhere)
我想要达到的目标如下:
mouseOver: state changes to 'hover'
mouseOut: state changes to 'normal'
mouseDown: state changes to 'active'
gloalMouseUp: state changes to 'normal'
问题:
如果状态为active
(mousebutton is down) 并且鼠标离开按钮,则状态应更改为normal
。当鼠标再次进入按钮而没有释放鼠标按钮时,状态应该是active
。如果在按钮外释放鼠标按钮,则状态应为hover
。
如果不依赖单独的状态变量来保持“活动”状态,我无法弄清楚这一点。
解决方案
已经拿到了
let active$ = merge(
mouseDown$.pipe(map(() => true)),
globalMouseUp$.pipe(map(() => false))
).pipe(startWith(false));
let hover$ = merge(
mouseOver$.pipe(map(() => true)),
mouseOut$.pipe(map(() => false))
);
let state$ = combineLatest(active$, hover$).pipe(
map(([active, hover]) => hover ? (active ? 'active' : 'hover') : 'normal')
)
推荐阅读
- javascript - 标签内的 HTML 加载器
- sql - SQL Union 和 Group By(按特定值分组但显示全部)
- r - R:如何使用 apply 循环遍历 data.frame 中的变量
- javascript - Javascript 将希伯来语单词和标点符号包装在单独的跨度标签中
- c++ - 如何从具有图像的按钮中检索图像源文件名?
- javascript - 客户端路由 vanilla JS
- ios - Iphone 5/Iphone 6/Iphone 7/Iphone X 的视口大小是多少
- datatables - jQuery 无法捕获 Laravel 中的 DataTable 按钮类
- ios - 如何在集合单元格中重绘动态大小的 UIView
- python - SelectKBest(chi2, k=5).fit(x_train, y_train) 如何计算得分?