我试图捕捉触摸开始和结束之间经过的持续时间,并且无论我尝试什么,似乎无法获得一致的行为。
我尝试了一些不同的解决方案,但行为总是零星的。这是我目前正在尝试的一个例子(下图)。
我有长时间和短暂触摸的警报,但结果似乎没有一致性。
我确实在'get-the-a-touch-in-javascript'之前已经看到了类似的问题,但该解决方案会产生相同的不确定结果。
任何建议都会非常感激。
$(document).ready(function() {
var $IndividualItem = $(".wrapperWithHover li a");
var touchStartTime;
var touchStartLocation;
var touchEndTime;
var touchEndLocation;
$IndividualItem.bind('touchstart', startOfTouch);
$IndividualItem.bind('touchend', endOfTouch);
$IndividualItem.bind('touchmove', endOfTouch);
function startOfTouch(e) {
e.preventDefault();
var d = new Date();
touchStartTime = d.getTime();
}
function endOfTouch(e) {
e.preventDefault();
var d = new Date();
touchEndTime= d.getTime();
doTouchLogic();
}
function doTouchLogic() {
var duration = touchEndTime - touchStartTime;
if (duration <= 1500) {
alert('1');
}
if (duration > 1500) {
alert('2');
}
duration = null;
}
$('.wrapperWithHover li a').each(function() {
var timeout,
longtouch;
$(this).bind('touchstart', function() {
timeout = setTimeout(function() {
longtouch = true;
}, 1000);
}).bind('touchend', function() {
if (longtouch) {
// It was a long touch.
}
longtouch = false;
clearTimeout(timeout);
});
});
});
这里有一小段html用于测试。(由于stackoverflow阻止我在那里提交问题,我不得不删除一个hrefs。)
- 测试
- 测试
- 测试
答案 0 :(得分:0)
您不必捕获touchmove
事件。因为在endOfTouch
发生之前,touchmove
事件会调用touchend
方法。
从代码中删除此行并尝试。它应该给你正确的结果。
$IndividualItem.bind('touchmove', endOfTouch);