我知道有一个简单的方法可以做到这一点 - 但今晚它打败了我......
我想知道两个事件是否在 300 毫秒内发生,例如双击。
在 300 毫秒内单击鼠标左键两次 - 我知道这就是响应式框架的构建目的 - 但该死的是,如果我能找到一个好的文档,其中包含所有扩展运算符的简单示例 - Throttle、BufferWithCount、BufferWithTime - 所有这些都不是' 为我做这件事......
The TimeInterval
方法将为您提供值之间的时间。
public static IObservable<Unit> DoubleClicks<TSource>(
this IObservable<TSource> source, TimeSpan doubleClickSpeed, IScheduler scheduler)
{
return source
.TimeInterval(scheduler)
.Skip(1)
.Where(interval => interval.Interval <= doubleClickSpeed)
.RemoveTimeInterval();
}
如果您想确保三次点击不会触发值,您可以使用Repeat
在热可观察上(我用过FastSubject
此处,因为点击全部来自同一个线程,因此不需要正常主题的沉重):
public static IObservable<TSource> DoubleClicks<TSource>(
this IObservable<TSource> source, TimeSpan doubleClickSpeed, IScheduler scheduler)
{
return source.Multicast<TSource, TSource, TSource>(
() => new FastSubject<TSource>(), // events won't be multithreaded
values =>
{
return values
.TimeInterval(scheduler)
.Skip(1)
.Where(interval => interval.Interval <= doubleClickSpeed)
.RemoveTimeInterval()
.Take(1)
.Repeat();
});
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)