单击单击并保持单击

时间:2015-02-24 21:18:13

标签: frp rxjs bacon.js reactive-extensions-js

我需要实现一种行为:

  • 当点击元素时 - 发生一件事
  • 但是当它被点击并保持一秒以上时,会发生其他事情(例如元素变得可拖动),然后第一个事件永远不会触发

我想我知道如何捕捉click& hold类型的事件,但如何区分第一和第二?

你能告诉我如何使用这个jsbin来做到这一点。我已经做了"点击,按住&拖动"部分,除了它仍在点击'点击'拖动元素后的事件,它不应该。

再次

:单击元素 - 一个事件,单击并按住 - 元素可拖动(即使在鼠标按下后),再次单击时,它将恢复正常(不可剥离)状态。

我不是在寻找一个简单的解决方案,它必须使用Rx.Observable或至少培根的streamEvent对象构建

谢谢

2 个答案:

答案 0 :(得分:5)

我认为您与您的解决方案非常接近,但在使用浏览器的内置click事件时,可能无法优雅地实现您的目标。

HERE是我尝试解决您的问题。

主要想法是定义您自己的点击流,如下所示:

var clicks = downs.flatMapLatest(function(){
  return ups.takeUntil(Rx.Observable.timer(250));
});

var longDownsStart = downs.flatMapLatest(function(){
  return Rx.Observable.timer(1000).takeUntil(ups);
});

如果是clicks,我们会在鼠标按下鼠标后等待最长250毫秒;如果是后者,我们只有在1000毫秒内没有鼠标启动时才会生成事件。

可能存在某些极端情况,其中代码无法正常工作。

答案 1 :(得分:2)

Here是我提出的解决方案(使用Bacon.js)。