WinJS gestureRecognizer - как поймать несколько жестов


Я использую эту статью (и некоторые другие), чтобы попытаться реализовать распознавание жестов в моем приложении, и это действительно работает. Однако то, что я хочу сделать, - это обнаружить несколько жестов; например, свайп и касание. Чего я, кажется, не могу сделать, так это установить, вызвано ли событие MouseUp окончанием жеста или одним прикосновением.

function processUpEvent(e) {
    lastElement = e.currentTarget;
    gestureRecognizer.processUpEvent(e.currentPoint);

    processTouchEvent(e.currentPoint);
}

То, что происходит в настоящее время, обрабатывается одновременно. Как я могу определить, отпустил ли пользователь экран на некоторое время? размах или прикосновение?

Правка:

    var recognizer = new Windows.UI.Input.GestureRecognizer();        

    recognizer.gestureSettings = Windows.UI.Input.GestureSettings.manipulationTranslateX
    recognizer.addEventListener('manipulationcompleted', function (e) {
        var dx = e.cumulative.translation.x
        //Do something with direction here
    });

    var processUp = function (args) {
        try {
            recognizer.processUpEvent(args.currentPoint);
        }
        catch (e) { }
    }

    canvas.addEventListener('MSPointerDown', function (args) {
        try {
            recognizer.processDownEvent(args.currentPoint);
        }
        catch (e) { }
    }, false);

    canvas.addEventListener('MSPointerMove', function (args) {
        try {
            recognizer.processMoveEvents(args.intermediatePoints);
        }
        catch (e) { } 
    }, false);
    canvas.addEventListener('MSPointerUp', processUp, false);
    canvas.addEventListener('MSPointerCancel', processUp, false);
Поэтому мне нужно обрабатывать и processUp, и manipulationcompleted, но либо одно, либо другое.
2 3

2 ответа:

Вы можете посмотреть мою демо-версию" input " в codeSHOW. Просто установите приложение codeSHOW (http://aka.ms/codeshowapp ) и посмотрите на указатель Input demo и "посмотрите код" или просто перейдите к исходному коду на CodePlex. Надеюсь, это поможет.

Я нашел способ сделать это, но это не очень красиво:

var eventFlag = 0;

var processUp = function (args) {
    try {
        recognizer.processUpEvent(args.currentPoint);

        if (eventFlag == 0) {
           // do stuff
        } else {
           eventFlag = 0;
        }
    }
    catch (e) { }
}

recognizer.gestureSettings = Windows.UI.Input.GestureSettings.manipulationTranslateX
recognizer.addEventListener('manipulationcompleted', function (e) {
    var dx = e.cumulative.translation.x
    //Do something with direction here
    eventFlag = 1;
});