gpt4 book ai didi

javascript - RxJS 取消重叠事件和延迟

转载 作者:行者123 更新时间:2023-11-30 20:16:42 24 4
gpt4 key购买 nike

如何在 RxJS 中延迟 300 毫秒并仅从 mouseLeave 事件流 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>
);
}
}

但它也无法触发之前的事件。当我快速鼠标离开时,它的隐藏和显示无法控制。

当鼠标离开 div 并等待 300 毫秒然后隐藏时,我想要 mouseDiv

最佳答案

添加 first() 和 repeat() 会将您的流从干净状态重置,它可能可以解决您的问题。

 Rx.Observable.fromEvent(block, "mouseleave")
.delay(300)
.throttleTime(300)
.first()
.repeat()
.subscribe(console.log);

fiddle :http://jsfiddle.net/cy0nbs3x/1384/

关于javascript - RxJS 取消重叠事件和延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51854206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com