浅析web移动开发常见的bug

随着只能手机的普及,web开发也越来越受开发者的关注,下面是网络整理的一些常见web开发的bug,欢迎补充:

问题一:android4.0以上一部分手机的webview中,当canvas小于屏幕大小时,绘图时会出现重影,就是说一个图只绘制了一遍,却出现了两个

解决方案:

canvas外层的div需要设定属性style="overflow:visible;-webkit-transform: translateZ(0);

问题二:使用HTML5的canvas进行绘图,android4.0以上,有一大部分手机会经常出现clearRect无效的bug。

解决方案:

方案1:

[java] view plain copy

在CODE上查看代码片派生到我的代码片

扫描二维码关注公众号,回复: 1687202 查看本文章

canvas.width=canvas.width

来代替

[java] view plain copy

在CODE上查看代码片派生到我的代码片

canvas.clearRect().getContext("2d").clearRect()

但是,这样做的后果,就是另有一小部分(比如国内的三星NOTE2和S4等)会出现浏览器卡死的情况。

方案2:

就是用不透明背景,对于每侦重绘的游戏或应用来说,不透明背景就不会存在清屏的问题,当然这其实是选择了绕行,对于需要将canvas背景设置成透明的情况还是没有解决。

方案3:

[java] view plain copy

在CODE上查看代码片派生到我的代码片

canvas.clearRect(0, 0, w, h);

canvas.style.visibility = ‘hidden’; // Force a change in DOM

canvas.offsetHeight; // Cause a repaint to take play

canvas.style.visibility = ‘inherit’; // Make visible again

这个会导致延时。

方案4:

[java] view plain copy

在CODE上查看代码片派生到我的代码片

canvas.clearRect(0, 0, w, h);

canvas.style.display = ‘none’;// Detach from DOM

canvas.offsetHeight; // Force the detach

canvas.style.display = ‘inherit’; // Reattach to DOM

问题三:应用css3 translate3d平移效果后的标签元素,在ios上的safari以及app的webview中会出现页面加载完成后其子元素闪动现象,具体如下:

<ul style=”-webkit-transform: translate3d(0, 0, 0); -webkit-transition: 0ms; “>

<li><img src=”http://pic2.58.com/m58/m3/img/imglogo_gray.png” ref=”http://1.pic.58control.cn/p1/big/n_22998799743506.jpg”></li>

</ul>

解决方法(两种):

1、可在其子元素中统一添加和其相同的属性,具体如下:

<ul style=”-webkit-transform: translate3d(0, 0, 0); -webkit-transition: 0ms; “>

<li style=”-webkit-transform: translate3d(0, 0, 0); “><img src=”http://pic2.58.com/m58/m3/img/imglogo_gray.png” ref=”http://1.pic.58control.cn/p1/big/n_22998799743506.jpg”></li>

</ul>

2、在其元素中添加如下属性:

-webkit-backface-visibility: hidden; (设置进行转换的元素的背面在面对用户时是否可见:隐藏)

-webkit-transform-style: preserve-3d; (设置内嵌的元素在3D 空间如何呈现:保留3D )

问题四;ios6修复了css position:fixed 1像素抖动的bug,不过引出另一个bug:当给指定元素添加position:fixed时首次加载页面完成后,滑动整个网页,添加此样式的元素会跟随页面滚动(目的是固定此元素)。

解决方法:

为其元素添加如下css属性即可:

-webkit-transform:translate3d(0,0,0)(具体原因不知)

问题五:android手机,微信6.1,qq浏览器x5内核,这三个条件存在的前提下,在弹出输入框的时候,整个canvas画面会被压扁。希望微信以后升级能解决这个问题吧。

解决方案:

目前还没有找到完美的解决方案,如果有人知道,请一定告诉我。

感觉现在最好的办法就是将canvas页面和有输入框的页面分离开。

还有一种方法只能解决一部分手机的问题,就是在canvas的上一层的div中,设置style.width和style.height分别等于canvas的style.width和style.height,但是经过测试,这样只能解决一部分手机。

问题六:android4.x中一部分手机,在改变canvas大小的时候有时会卡死。大家可能都知道,重新设定canvas的大小可以实现canvas的完全刷新,但是也会导致一部分4.x手机卡死。

解决方案:

用clearRect刷新canvas。

猜你喜欢

转载自blog.csdn.net/trustauth/article/details/80452365