簡體   English   中英

如果使用Bacon.js跟蹤拖動事件,我將如何取消點擊事件?

[英]How would I cancel a click event if it was following a drag event using Bacon.js?

所以我有一些事件流:

let mouseUps = $(window)
  .asEventStream('mouseup');

let mouseDowns = $(window)
  .asEventStream('mousedown');

let mouseMoves = $(window)
  .asEventStream('mousemoves');

let drags = mouseDowns
  .flatMapLatest(() => mouseMoves.takeUntil(mouseUps));

let clicks = $(window)
  .asEventStream('click')
  .onValue(() => doThing());

我想忽略拖動結束后立即觸發的點擊次數。 我覺得有一個相當簡單的方法可以做到這一點,但我仍然在努力解決一些核心概念。

解決方案是使用stream.awaiting()創建一個屬性,該屬性可用於在拖動后過濾掉單擊。

var btn = $('#btn');
var mouseUps = btn.asEventStream('mouseup');
var mouseDowns = btn.asEventStream('mousedown');
var mouseMoves = btn.asEventStream('mousemove');
var drags = mouseDowns.flatMapLatest(function () {
    return mouseMoves.takeUntil(mouseUps);
});

var clicks = btn.asEventStream('click');
var isDraggingStarted = drags.awaiting(mouseDowns);

clicks.filter(isDraggingStarted.not()).onValue(doThing);

可以在這里找到一個例子: http//jsfiddle.net/a128jhxb/1/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM