[英]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.