2011-12-29 6 views
4

Я сейчас работаю над приложением метро, ​​и я ищу, чтобы включить мультитач. Я просматривал Google, но я не могу найти API для его поддержки. Может ли кто-нибудь указать мне в правильном направлении для поддержки мультитач-действий в приложении Windows 8 Metro?Как обнаружить мультитач-действия в приложении для Windows 8?

ответ

2

Что именно вы пытаетесь сделать? Есть Touch, Pointer (абстракция вокруг сенсорной/мыши/стилуса), и манипуляционный события на каждом элементе UI

1

Посмотрите на этот пост Touch Input for IE10 and Metro style Apps

Пример сценария от пост:

<script> 
function handleEvent(event) { 
    var currentPointers = event.getPointerList(); 
    if (currentPointers.length == 1) { 
     event.target.style.backgroundColor = "red"; 
     } else { 
     event.target.style.backgroundColor = "green"; //multiple touch points are used 
     } 
    } 
document.getElementById("foo").addEventListener("MSPointerMove", handleEvent, false); 
</script> 
+1

Вы пробовали это? getPointerList, похоже, не является частью полезной нагрузки события ...: \ –

+1

Больше не поддерживается в RTM – Aerilys

2

В JavaScript вы можете использовать событие event.pointerId для обнаружения нескольких сенсорных входов. Этот идентификатор дает каждому новому вводу идентификатор. Когда вы хотите получить множественные касания для движения пальцем, вы можете использовать событие MSPointerMove и этот идентификатор. Я использую jQuery, но функция bind и unbind не будет работать, потому что событие не подключено. Вы должны использовать простой Javascript, чтобы получить мультисенсорный работу:

var pointerId=0; 
//add a Eventlistner to the Down Event (compareable to mousedown and touchstart) 
$('#button1')[0].addEventListener("MSPointerDown",function(event) { 
     pointerId=event.pointerId; //save the pointerId to a (in this case) global var 
     window.addEventListener("MSPointerMove", moveHandler, false); 
     //The handlers should also be removed on MSPointerUp. 
     //You can't use jQuery unbind for this, it dosn't work. 
     //use window.removeListener("MSPointerMove",moveHandler); 
},false); 

//define the moveHandler and check the pointer ID 
var moveHandler = function(event) { 
     if(pointerId==event.pointerId) { 
      //If the pointerId is the same, the moving comes from one finger 
      //For example we can move the button with the finger 
      $("#button1").css({'top':event.pageY,'left':event.pageX,'position':'absolute'}); 
     } 
} 

Ниже приведен полный пример с Еогеасп, чтобы прикрепить событие-обработчики для более чем одной кнопки. Если вы запустите это приложение, вы получите 4 квадрата, которые вы можете перемещать несколькими пальцами.

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <title>App1</title> 

    <!-- WinJS references --> 
    <link href="//Microsoft.WinJS.1.0.RC/css/ui-dark.css" rel="stylesheet" /> 
    <script src="//Microsoft.WinJS.1.0.RC/js/base.js"></script> 
    <script src="//Microsoft.WinJS.1.0.RC/js/ui.js"></script> 

    <!-- App1 references --> 
    <link href="/css/default.css" rel="stylesheet" /> 
    <script src="/js/default.js"></script> 
    <script src="js/jquery.js"></script> 
    <script> 
     function start() { 
      //add a Eventlistner to the Down Event (compareable to mousedown and touchstart) 
      $(".button").each(function (i, element) { 
       var pointerId = 0; 
       $(element)[0].addEventListener("MSPointerDown", function (event) { 
        pointerId = event.pointerId; //save the pointerId to a (in this case) global var 
        window.addEventListener("MSPointerMove", moveHandler, false); 
       }, false); 

       //PointerUp handler 
       window.addEventListener("MSPointerUp", upHandler, false); 

       //define the moveHandler and check the pointer ID 
       var moveHandler = function (event) { 
        if (pointerId == event.pointerId) { 
         $(element).css({ "top": event.pageY-50, "left":event.pageX-50 }); 
        } 
       } 

       //remove the moveHandler on PointerUp 
       var upHandler = function (event) { 
        if (pointerId == event.pointerId) { 
         window.removeListener("MSPointerMove", moveHandler); 
        } 
       } 
      }); 
     } 
    </script> 
</head> 
<body> 
    <div class="button" style="width:100px;height:100px;background-color:#F80;position:absolute;"></div> 
    <div class="button" style="width:100px;height:100px;background-color:#08F;position:absolute;"></div> 
    <div class="button" style="width:100px;height:100px;background-color:#fff;position:absolute;"></div> 
    <div class="button" style="width:100px;height:100px;background-color:#4cff00;position:absolute;"></div> 
</body> 
</html> 

С этим соглашением вы можете одновременно использовать 4 пальца.

0

Попробуйте ManipulationDelta любого контроля ...

вы можете найти ли сенсорный мультитач или не detrmining Масштабировать свойство любых аргументах манипуляция событий ....

private void AssetMap_ManipulationDelta_1(object sender, ManipulationDeltaRoutedEventArgs e) 
     { 

      if (e.Cumulative.Scale != 1) 
      { 

//indicates that it is multitouch 

} 

надеюсь, что это будет помочь вам ...

 Смежные вопросы

  • Нет связанных вопросов^_^