我正在编写PhoneGap应用程序,并在一个视图上使用滑动和滚动。对于滚动我使用原生滚动(我曾尝试使用iScroll,但我的视图中有很多输入,所以我发现它的更好的解决方案是本机滚动)。为了定义移动方向,我在数组中收集前10个touchmove事件并检查clientX和clienY值,然后定义平均值。并且一切都应该是好的,但是在Android touchmove事件中不起作用的是没有preventDefault()的滚动视图。所以,根据这个问题,我使用preventDefault()进行前10个touchmove事件,而不是依赖方向继续使用preventDefault()并进行滑动,或者不使用preventDefault()并进行滚动。但当我滚动时没有任何事情发生(。有一个例子:
var list = document.querySelector('ul');
var arr = [];
var ev = document.createEvent('UIEvent');
var evEnd = document.createEvent('UIEvent');
var evCancel = document.createEvent('UIEvent');
var flag = false;
ev.initUIEvent("touchstart", true, true);
evEnd.initUIEvent("touchend", true, true);
evCancel.initUIEvent("touchcancel", true, true);
list.addEventListener('touchstart', startMove, false)
list.addEventListener('touchend', endMove, false)
function startMove(e){
list.addEventListener('touchmove', move, false)
}
function move(e){
if(flag){
return;
}
e.preventDefault();
arr.push(e);
if(arr.length>10){
flag = true;
list.dispatchEvent(evEnd);
list.dispatchEvent(evCancel);
list.dispatchEvent(ev);
return;
}
}
function endMove(e){
list.removeEventListener('touchmove', move, false)
list.removeEventListener('touchend', endMove, false)
}