Javascript Android浏览器在“之后停止渲染画布”;“双刷”;纸卷
我有一个运行在NexusOne和Android v2.3.6上的全屏web应用程序。我已经尽我所能防止滚动。我正在对以下事件调用Javascript Android浏览器在“之后停止渲染画布”;“双刷”;纸卷,javascript,android,html,canvas,scroll,Javascript,Android,Html,Canvas,Scroll,我有一个运行在NexusOne和Android v2.3.6上的全屏web应用程序。我已经尽我所能防止滚动。我正在对以下事件调用preventDefault()和stopPropagation(): document.addEventListener('touchmove', eventCanceller, false ); document.addEventListener('touchstart',eventCanceller, false ); document.addEventListe
preventDefault()
和stopPropagation()
:
document.addEventListener('touchmove', eventCanceller, false );
document.addEventListener('touchstart',eventCanceller, false );
document.addEventListener('touchend',eventCanceller, false );
document.addEventListener('wheel',eventCanceller, false );
document.addEventListener('mousewheel',eventCanceller, false );
document.addEventListener('DOMMouseScroll',eventCanceller, false );
window.addEventListener('touchmove',eventCanceller, false );
window.addEventListener('touchstart',eventCanceller, false );
window.addEventListener('touchend',eventCanceller, false );
window.addEventListener('wheel',eventCanceller, false );
window.addEventListener('mousewheel',eventCanceller, false );
window.addEventListener('DOMMouseScroll',eventCanceller, false );
canvas.addEventListener('click',eventCanceller, false);
canvas.addEventListener('dblclick',eventCanceller, false);
在我处理这些事件之后,我还将停止传播并防止默认事件
canvas.addEventListener('touchstart',handleEvent, false);
canvas.addEventListener('touchmove',handleEvent, false);
canvas.addEventListener('touchend',handleEvent, false);
该应用程序工作正常,所有非预期的滚动都被抑制。除此之外,如果我快速进行两次或两次以上的小滑动,URL栏将向下滚动,画布上的所有渲染将停止。没有javascript错误,调试显示应用程序继续运行,my draw函数继续被调用,它认为它仍然有一个有效的2DContext,但屏幕被冻结。如果使用轨迹球滚动屏幕,渲染将重新开始。我在KindleFire上看到了完全相同的情况。在该设备上,如果切换到/退出全屏模式,渲染将启动备份
有没有办法抑制我在“双击”中看到的冻结/滚动效果 我受够了
它可能是安卓4.1上的固定版本(与触摸事件有关的许多事情显然是固定的)
在我现在正在开发的安卓2.3上,我有一个令人恶心的变通方法,就是我这么做
// force a reflow of the canvas in case it has hung (on android)
canvas.width = canvas.width-1;
canvas.width=canvas.width+1;
我现在每一帧都这样做(反正我只以20fps的速度运行),看起来效果还不错
总的来说。经过更多的挖掘,我意识到这个问题可以与不需要的滚动分离。即使没有滚动,渲染也会在一个简单的示例应用程序上冻结。我要么错过了Android浏览器上JS事件处理的一些基本知识,要么HTML5游戏在Android上遇到了麻烦,因为旧手机和新(畅销)平板电脑都存在同样的问题。没有一家游戏公司会希望推出一款在消费者看来像冻结崩溃的产品。试试吧,谢谢,乔。我会调查这件事的。