如何捕捉touchend坐标?

Rik*_*ard 30 javascript mootools touch

我试图捕捉touchend事件的触摸坐标,但未定义.该touchstart事件的作品不错,但相同的概念失败上touchend.我建立了这个代码mousedown,并mouseup工作良好.

我错过了什么?

div.addEvent("touchstart", function (event) {
    event.preventDefault(); // to avoid scrolling
    span.innerHTML = event.page.x;
});
div.addEvent("touchend", function (event) {
    span.innerHTML = event.page.x;
});
Run Code Online (Sandbox Code Playgroud)

小提琴

adr*_*lin 31

您需要存储值touchmove并将其读入touchend.

var lastMove = null;

// Save the touchstart to always have a position
div.addEvent('touchstart', function(event) {
  lastMove = event;
});

// Override with touchmove, which is triggered only on move
div.addEvent('touchmove', function(event) {
  lastMove = event;
});
Run Code Online (Sandbox Code Playgroud)

  • 这是一个来自Google搜索的解决方案,但我总是在touchend上使用event.changedTouches [0] .pageX来获取coord,ala:http://jsfiddle.net/YrQjH/3/ (9认同)
  • 正确的原因似乎是触摸事件存储当前触摸,并且当触摸结束时,没有当前触摸. (3认同)
  • 对不起,但这个答案有些不正确,因为移动仅在触摸实际移动时触发.一个简单的"点击式"触摸将触发touchstart,然后触摸,从不触摸移动.所以是的,您需要将该位置存储在touchmove中,但大部分也是在touchstart中,以防没有拖动.在这种情况下,要存储的东西是X,Y位置,而不是事件. (2认同)

Dav*_*zar 26

我一直在看规范,4个触摸事件继承自touchEvent对象,它有3个列表属性,包含事件发生时所有触摸(屏幕上的每个手指)的信息,每个列表保存基于此的触摸criteria ::

changedTouches保存已超出目标元素表面的触摸.

touches:保存所有当前触摸.

targetTouch:保存目标元素表面内的所有当前触摸.

事件touchend保存手指被抬起的位置changedTouches,并且没有任何内容保存在任何其他列表中,因此如果您需要访问它,您应该使用event.changedTouches[event.changedTouches.length-1],这将返回带有pageX和pageY属性的触摸对象的坐标.
整行将是:

span.innerHTML = event.changedTouches[event.changedTouches.length-1].pageX;
Run Code Online (Sandbox Code Playgroud)

我还无法理解的是,如果touchEvent对象中没有坐标属性,为什么要在touchstart和touchmove事件中使用它们,而不是使用touchend.也许实现添加了这个快捷方式,或者我想念.


ids*_*llp 8

您应该使用changedTouches,而不是touchestouchend

div.addEvent("touchstart", function (event) {
    event.preventDefault(); // to avoid scrolling
    span.innerHTML = event.pageX;
});
div.addEvent("touchend", function (event) {
    span.innerHTML = event.changedTouches[0].pageX;
});
Run Code Online (Sandbox Code Playgroud)