2012-09-20 30 views
2

我的代碼工作正常,用於手指輕掃手勢,即如果我用手指輕掃,它會觸發事件並調用nextMonth()函數。現在有什麼方法可以檢查我是否向上和向下滑動,以便在兩種不同的手勢上調用兩種不同的方法。MsGesture,在城市風格的應用程序中向不同方向滑動

  var myGesture = new MSGesture(); 
      var v = this.element.querySelector(".bartouch"); 
      myGesture.target = v; 
      v.addEventListener("MSGestureEnd", handleListner,false); 
      v.addEventListener("MSPointerDown", handleListner, false); 

     function handleListner(evt) { 
      if (evt.type == "MSPointerDown") 
       { 
       myGesture.addPointer(evt.pointerId); 
       return; 
      } 
     that.nextMonth(); 
     } 

回答

1

你有兩個選擇:

  1. 使用MSGesture,並處理MSGestureStart, MSGestureChange, and MSGestureEnd事件來計算用戶手指的翻譯(或手指),並看看他們是否在正確的方向。由MSGestureChange返回的事件對象包括translateX & translateY屬性,它告訴您用戶移動手指的距離。有一個詳細的樣本here

  2. 使用Windows.UI.Input.GestureRecognizer並使用手勢對象上的gesture settings將手勢設置爲特定X平移或Y平移。 Ball Eight sample顯示瞭如何做到這一點。它主要涉及創建GestureRecognizer類,並通過在想要查看交互的DIV上處理MSPointer[Down|Move|Up|Cancel] DOM事件並通過它的process[Down|Move|Up]Event處理程序將它們傳遞到您的(共享)識別器實例來爲其提供事件。

就個人而言,我會建議使用2,而不是1 - 而這是設置比較困難,你最終會與用戶具有刷卡一致的手勢體驗,筆觸等,而不是你有手動調整你的手勢,就像你選擇方法1一樣。

+0

您的球八個示例鏈接不起作用。是否有更新鏈接或指向另一個示例的鏈接,以顯示您在2中概述的行爲? –

0

我已經在我的一個遊戲中成功地使用了HammerJS來處理各個方向的手勢。

這是所有我需要處理所有四個方向的代碼:

var hammerOptions = { swipeVelocityX: 0.1, swipeVelocityY: 0.1 }; 
Hammer(contentContainer, hammerOptions).on("swipeleft", function(event) { moveBlocksLeft(); }); 
Hammer(contentContainer, hammerOptions).on("swiperight", function(event) { moveBlocksRight(); }); 
Hammer(contentContainer, hammerOptions).on("swipeup", function(event) { moveBlocksUp(); }); 
Hammer(contentContainer, hammerOptions).on("swipedown", function(event) { moveBlocksDown(); }); 

哪裏contentContainer是包含內容一個div,每個方向具有這樣的功能,以進一步處理該手勢。

相關問題