Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Android浏览器在“之后停止渲染画布”;“双刷”;纸卷_Javascript_Android_Html_Canvas_Scroll - Fatal编程技术网

Javascript Android浏览器在“之后停止渲染画布”;“双刷”;纸卷

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

我有一个运行在NexusOne和Android v2.3.6上的全屏web应用程序。我已经尽我所能防止滚动。我正在对以下事件调用
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上遇到了麻烦,因为旧手机和新(畅销)平板电脑都存在同样的问题。没有一家游戏公司会希望推出一款在消费者看来像冻结崩溃的产品。试试吧,谢谢,乔。我会调查这件事的。