javascript - RxJS 取消重叠事件和延迟
问题描述
如何延迟 300 毫秒并仅从mouseLeave
RxJS 中的事件流 Observable 中获取最后一个事件?我只想获取最新事件并将其延迟到 300 毫秒,然后触发一个方法。
class MouseOverComponent extends React.Component {
state = {menuIsOpen: false}
componentDidMount() {
this.mouseLeave$ = Rx.Observable.fromEvent(this.mouseDiv, "mouseleave")
.delay(300)
.throttleTime(300)
.subscribe(() => /* here I want to hide the div */);
}
componentWillUnmount() {
this.mouseLeave$.unsubscribe();
}
menuToggle = e => {
e && e.preventDefault()
let {menuIsOpen} = this.state
menuIsOpen = !menuIsOpen
this.setState({menuIsOpen, forceState: true})
}
render() {
// const menuStateClass = ... resolving className with state
return (
<div ref={(ref) => this.mouseDiv = ref}>
Move the mouse and look at the console...
</div>
);
}
}
但它也无法触发以前的事件。当我快速鼠标离开时,它的隐藏和显示无法控制。
我想当mouseDiv
鼠标离开 div 并等待 300 毫秒然后隐藏。
解决方案
添加 first() 和 repeat() 会将您的流从干净状态重置,它可能可以解决您的问题。
Rx.Observable.fromEvent(block, "mouseleave")
.delay(300)
.throttleTime(300)
.first()
.repeat()
.subscribe(console.log);
小提琴:http: //jsfiddle.net/cy0nbs3x/1384/
推荐阅读
- c# - 更改 a 的可见性
- 真/假 C# 母版页
- reactjs - 使用 alert 打印文本以外的其他内容
- visual-studio - Intellisense 在 Visual Studio for Sql Server 数据项目中不起作用
- python - ImportError:无法从部分初始化的模块“dogehouse”导入名称“DogeClient”(很可能是由于循环导入)
- c# - 逐行发送,不重复
- python - Windows OS下Nodejs运行python脚本
- javascript - 如何将 MapQuest RouteLayer 添加到传单图层
- apache-camel - 我想通过camel-context.xml配置2个消息队列,所以我需要基于条件的路由
- java - Java:向while循环添加用户输入
- azure - 禁用 Azure Active Directory 单一注销