Javascript Android浏览器触摸事件停止显示更新,包括画布/元素-如何解决?
在一些安卓的原生浏览器上,触摸页面似乎会阻止屏幕更新,直到手指松开。对于基于html元素的动画(切换类)和基于画布的动画,都会发生这种情况。但是,它不会停止正常的js执行,其他事件会正常触发。在有此问题的设备上,dolphin浏览器似乎也会受到影响(但不是firefox) Touchstart/move都触发了preventDefault()和StopperOrganization(),cancelBubble=true;e.returnValue=false;。在CSS中,webkit选择也被禁用。页面将不会滚动 这里也提出了类似的问题: 但我想知道这种行为是否可以被克服,或者至少要发现什么设备会受到问题的影响,这是设备还是版本的问题?如果您无法回答问题,请运行演示并报告您的体验以及您的设备型号和useragent(显示在演示页面底部),作为评论,这可能有助于他人或我回答问题 下面是一个演示和重现行为的步骤。链接的二维码可在此处找到 网页顶部有一个画布,底部有一个带有背景图像的div。每隔一秒钟,画布就会被清除,并显示不同的图像,div的类会被切换(两者都在0和1 PNG之间切换)。切换几次后,将手指放在画布(顶部的灰色框)上,并保持在那里。等待查看动画是否继续(有时会持续一次或两次,然后停止),以及是否存在任何视觉扭曲 更新 运行3.2的Galaxy选项卡似乎需要touchstart/end of document的处理程序,而不仅仅是屏幕继续更新显示所需的div。谢谢jimpicJavascript Android浏览器触摸事件停止显示更新,包括画布/元素-如何解决?,javascript,android,android-2.3-gingerbread,Javascript,Android,Android 2.3 Gingerbread,在一些安卓的原生浏览器上,触摸页面似乎会阻止屏幕更新,直到手指松开。对于基于html元素的动画(切换类)和基于画布的动画,都会发生这种情况。但是,它不会停止正常的js执行,其他事件会正常触发。在有此问题的设备上,dolphin浏览器似乎也会受到影响(但不是firefox) Touchstart/move都触发了preventDefault()和StopperOrganization(),cancelBubble=true;e.returnValue=false;。在CSS中,webkit选择也被
我开始相信这是由制造商的皮肤引起的问题,尽管这很难证明。我真的无法告诉您为什么会发生这种情况,但我在注册文档触摸事件时遇到了类似的问题。当我只注册touch move事件时,我遇到的问题与您遇到的问题完全相同,但是当我也注册touchstart时,它突然起了作用。在您的示例中,只需将以下行添加到main.js
function touchHandlerDummy(e)
{
e.preventDefault();
return false;
}
document.addEventListener("touchstart", touchHandlerDummy, false);
document.addEventListener("touchmove", touchHandlerDummy, false);
document.addEventListener("touchend", touchHandlerDummy, false);
在我的Galaxy选项卡上工作。希望这就是你想要做的。这样就可以了:)
函数touchHandlerDummy(e)
{
e、 预防默认值();
返回false;
}
文件。添加的文件列表(“touchmove”,touchHandlerDummy,false);
我也有同样的问题。神奇的是,当我在
部分添加以下行时,问题完全消失了:
<meta name="viewport" content="width=device-width">
这里的答案对我帮助很大 我的解决方案简单地结合了这里提到的内容,因此,如果您愿意:
1。三星Galaxy S2本机浏览器(Android 4.1.2)上的“拖放”
2。禁用用户缩放页面(视口设置为无缩放)
addEventListener(“加载”,函数(){
函数onTouchPreventDefault(事件){event.preventDefault();};
document.addEventListener(“touchmove”,默认值,false);
document.addEventListener(“touchstart”,默认为false);
},假);
- 不幸的是,用户仍然可以稍微放大页面,1.01是完成此任务的最小值
document.addEventListener(“touchmove”,函数(事件){event.preventDefault();},false);
- 这将禁用“收缩”以进行缩放
document.addEventListener(“touchstart”,函数(事件){event.preventDefault();},false);
//或
addEventListener(“touchend”,函数(事件){event.preventDefault();},false);
- 这将禁用双击缩放,您可以选择是否要使用touchstart或touchend(或两者兼有)进行此紫色鼠标
我将开始:直到抬起手指,显示才会更新。设备华为Ascert G300:mozilla/5.0(linux;u;android 2.3.6;en gb;u8815 build/huaweiu8815c02b882)applewebkit/533.1(khtml,如gecko)版本/4.0 mobile safari/533.1感谢您的响应,但演示代码已经使用preventDefault并在touchstart和touchmove上返回false。演示页面是否在您的选项卡上工作?您使用的是哪个版本的android(请也使用subversion,即x.y.z)?感谢againI,我知道它已经使用了preventDefault,但只针对选定的元素,而不是完整的文档,也许这就是问题所在。只要在jQuery ready()函数中将上面的行添加到main.js中,它就可以工作了。它在我的Galaxy选项卡上之前不起作用,但是之后-所以试试看:)(Android版本3.2)我复制了你的整个项目,并添加了上面的行。它现在可以工作了。最初在这个演示中,我确实有文档触摸事件的处理程序,但删除了它们以允许复制和粘贴用户代理。这并不能解决我的设备(华为g300)上的问题,但有趣的是,您可以在3.2选项卡上看到这种行为。没有文档touchstart/end的处理程序,它可以在Galaxy Ace 2.3.3和android模拟器2.3.3上运行。我还没有在sim卡上试用过3.2,我会稍后再比较。我开始认为这可能是一个不同的皮肤制造商应用的问题。我会用你的信息更新这个问题,谢谢。你只需要防止触摸屏上的默认设置。这段代码在Android 2.3和Android 4.1上完全禁止任何方向的滚动,为什么会有人使用它?jimpic的回答中已经提出并讨论了这一点。覆盖常规beh时,您还始终需要处理touchstart
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.01">
<script>
window.addEventListener("load", function() {
function onTouchPreventDefault(event) { event.preventDefault(); };
document.addEventListener("touchmove", onTouchPreventDefault, false);
document.addEventListener("touchstart", onTouchPreventDefault, false);
}, false);
</script>
</head>