我想创建一个事件流,只要用户触摸并将手指移动一些像素,就会触发事件。事件应包含用户移动了多少的相对x和y值。以下代码正确执行:
var extractTouchEvent = function (type) {
return extractEventE(document.body, type).mapE(function(e){
return {left:e.targetTouches[0].pageX, top:e.targetTouches[0].pageY};
});
};
var touchStartE = extractTouchEvent('touchstart');
var touchMoveE = extractTouchEvent('touchmove');
var draggedE = switchE(touchStartE.mapE(function(startValue){
return touchMoveE.mapE(function(moveValue){
return {left:moveValue.left-startValue.left, top:moveValue.top-startValue.top}
})
}));
但是如果我们通过添加一些日志来修改它:
var draggedE = switchE(touchStartE.mapE(function(startValue){
return touchMoveE.mapE(function(moveValue){
var a = {left:moveValue.left-startValue.left, top:moveValue.top- startValue.top};
console.log(a.left);
return a;
})
}));
我们将看到所有过去的touchmove EventStreams仍会在每个touchmove事件上进行评估,尽管被switchE方法删除,该方法仅为结果事件选择最新的EventStream。 这些方法是否可以避免这种懒惰评估的大量泄漏?
答案 0 :(得分:0)
var downE = clickDownE( guiElement ).mapE( function(){
return mouseMoveE( guiElement );
});
var upE = clickUpE( guiElement ).mapE( function(){
return zeroE();
};
var coordinatesE = mergeE(downE, upE).switchE();
这没有很好的记录,但如果你给switchE一个零,它会清理所有东西并停止。如果你给它其他事件,它将清理并输出每个evaulation的新事件。