是否可以将第一个pageX值存储在touchstart上?

时间:2012-02-15 10:36:03

标签: javascript touch touchstart

我想计算touchstart的初始值与touchmove上的实际值之间的距离。

例如:

我触摸屏幕:startX = 100; 然后,我在屏幕上移动手指:moveX = 150;

startX和moveX的距离是(moveX - startX)= 50;

CODE UPDATED:

function touch(event) {
var moveX = event.pageX;
var totalMoved = Math.abs(document.startX - moveX);
shipX = totalMoved;
consoleLog(totalMoved);
};

function touchStart(event) {
    touch(event.touches[0]);
    document.startX = event.pageX;
};

function touchMove(event) {
    event.preventDefault();
    touch(event.touches[0]);
}; 

function touchEnd(event) {
    touch(event.touches[0]);
    var totalMoved = 0;
}; 

2 个答案:

答案 0 :(得分:0)

moveX在不同的函数中声明,因此表示不同的变量。在所有这些函数的封闭范围内声明var moveX(我想您可能希望对startX执行相同的操作)。

答案 1 :(得分:0)

是的,这是可能的。您只需将值存储在touchMove()函数中可见的范围内。为了便于说明,我们可以通过污染全局范围来解决这个问题:

function touchStart(event) {
    touch(event.touches[0]);
    window.startX = event.pageX;
};

function touchMove(event) {
    event.preventDefault();
    var moveX = event.pageX;
    var totalMoved = Math.abs(window.startX - moveX);
}; 

当然,在不污染全球范围的情况下,有多种方法可以做到这一点。例如,您可以使事件处理函数成为某个对象的成员,该对象将必要的状态保存为成员变量。或者touchStart()处理程序可以创建一个封装startX变量的闭包,然后将其设置为touchesMoved处理程序。等等。