随着只能手机的普及,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上查看代码片派生到我的代码片
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。