4

我需要实现一个行为:

  • 单击元素时-发生一件事
  • 但是当它被单击并按住超过一秒钟时,会发生其他事情(例如元素变得可拖动),然后第一个事件永远不会触发

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

你能告诉我如何使用这个jsbin来做到这一点。我已经制作了“单击、按住和拖动”部分,只是在拖动元素后它仍在触发“单击”事件,但它不应该。

再次:单击元素 - 一个事件,单击并按住 - 元素是可拖动的(即使在鼠标向上之后),当再次单击时,它会恢复到正常(不可拖动)状态。

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

谢谢

4

2 回答 2

6

我认为您的解决方案非常接近,但在使用浏览器的内置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 毫秒内没有鼠标向上时才会生成事件。

在某些极端情况下,代码可能无法按预期工作。

于 2015-02-25T11:56:46.943 回答
2

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

于 2015-02-25T12:16:54.717 回答