2013-07-03 3 views
0

В основном, я пытаюсь определить, в каком направлении движется пользователь, двигая пальцем по устройству iOS с помощью javascript.Определяет, увеличивается или уменьшается переменная?

Я знаю, что я могу понять, где палец с помощью:

e.originalEvent.touches[0].pageX; 

Так что моя идея состояла в том, чтобы

  1. магазин расположение первой позиции перемещения, скажем 130

  2. Определите местонахождение следующей позиции, скажем 129

  3. Если текущее положение больше, оно перемещается вправо. меньше, двигаясь в левой

Единственная проблема заключается в том, что она будет работать в случае, как это:

$(".container").on("touchmove", function (e) { 
    e.preventDefault(); 
}); 

Так что я не уверен, что лучший способ для хранения предыдущего местоположения , затем следующее местоположение и проверьте, больше ли они или меньше.

Моя первоначальная идея состояла в том, чтобы использовать что-то вроде этого:

$(".container").on("touchstart", function (e) { 
    e.preventDefault(); 
    original = e.originalEvent.touches[0].pageX; 
}); 

$(".container").on("touchmove", function (e) { 
    e.preventDefault(); 
    direction = e.originalEvent.touches[0].pageX; 
    if (direction > original) { 
     console.log("right"); 
    } else { 
     console.log("left"); 
    } 
}); 

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

ответ

1

Похоже, ты почти там - вы должны быть в состоянии получить поведение, которое вы хотите, обновляя точку, что вы сравниваете в каждый раз, когда событие вызывается, как это:

При этом, в зависимости от платформы и того, что вы пытаетесь достичь, вы можете обнаружить, что простое сравнение текущей позиции с предыдущей позицией дает результаты, которые слишком «шумны» (т. Е. Поскольку палец пользователя не касается только одного пикселя , вы можете увидеть выходные данные, такие как «правый», «правый», «левый», «правый», «правый», «левый», «правый», ..., когда пользователь медленно двигает пальцем вправо). Если это произойдет, вы можете сделать что-то вроде записи последних 5 предыдущих позиций и сравнить их, например:

var positions = []; 
$(".container").on("touchstart", function (e) { 
    e.preventDefault(); 
    positions.push(e.originalEvent.touches[0].pageX); 
}); 

$(".container").on("touchmove", function (e) { 
    e.preventDefault(); 
    positions.push(e.originalEvent.touches[0].pageX); 

    var direction = 0; 
    var i; 
    for (i = 0; i < positions.length - 1; i++) { 
     if (positions[i + 1] > positions[i]) { 
      direction++; 
     } else { 
      direction--; 
     } 
    } 

    if (direction > 0) { 
     console.log("right"); 
    } 
    else { 
     console.log("left"); 
    } 

    if (positions.length > 5) { 
     positions.shift(); 
    } 
}); 
Смежные вопросы