2013-10-22 6 views
0

사용자가 손가락으로 터치하여 움직일 때마다 이벤트를 발생시키는 이벤트 스트림을 만들고 싶습니다. 이벤트에는 사용자가 이동 한 정도에 따라 상대 x 및 y 값이 포함되어야합니다.flapjax를 다루는 방법 사용하지 않는 EventStreams

  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; 
         }) 
        })); 

우리는 switchE 하락에도 불구하고 과거의 모든하는 TouchMove의 EventStreams 여전히 각하는 TouchMove 이벤트를 평가하는 것을 볼 수 있습니다 메서드를 호출하여 결과 이벤트에 대한 최신 EventStream 만 선택합니다. 이러한 방법으로 게으른 평가가 많이 누출되는 것을 피할 수 있습니까?

답변

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를 0으로 설정하면 모든 것이 정리되고 중지됩니다. 다른 이벤트를 주면 각 이벤트마다 정리하고 새 이벤트를 출력합니다.