单击单击并保持单击

iLe*_*ing 4 frp reactive-extensions-js rxjs bacon.js

我需要实现一个行为:

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

我想我知道如何捕捉点击和保持类型的事件,但如何区分第一和第二?

你能告诉我如何使用这个jsbin做到这一点.我已经完成了"点击,按住并拖动"部分,除了它在拖动元素后仍然触发'click'事件,它不应该.

再次:单击元素 - 一个事件,单击并按住 - 元素可拖动(即使在鼠标向上),再次单击时,它将恢复正常(不可碎片)状态.

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

谢谢

art*_*iak 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);
});
Run Code Online (Sandbox Code Playgroud)

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

可能存在一些极端情况,其中代码无法按预期工作.