HTML5 Canvas遇到的几个问题
1. height、width和style.height、style.width
在之前开发的页面中,一般都是通过css来控制页面上元素的尺寸。刚开始使用canvas时,也采用了同样的方式,可是结果却出人意料。代码如下:
[html
<p id="wrapper">
<canvas height="50" id="canvas1" style="width:100%"></canvas> <pre name="code" class="html"> <canvas height="50" id="canvas2" style="width:100%"></canvas></pre><p>
根据响应式原则,用百分比控制元素的尺寸可以使其自适应窗口不同的分辨率的变化。可是,对canvas却不是这样。当上面的代码执行后,每次都会出现的不同的效果,有时canvas1的宽度只有不到wrapper的一半,而有时高度有莫名其妙的达到了近400px。里面绘制的线条更是找不到影子。
直到在*上发现了:http://*.com/questions/4938346/canvas-width-and-height-in-html5,才明白就里。原来canvas的实际尺寸是通过height和width来控制的;css中得height和width使其显示的大小,所以设置了它们就相当于缩放了显示区域,所以才会变形。找到了原因,自然就容易解决问题了:
[html]
<p id="wrapper">
<canvas id="canvas1" height="50" width="300"></canvas>
<canvas id="canvas2" height="50" width="300"></canvas>
</p>
下面是用来设置尺寸的javascript:
[html]
function resizecanvas(){
var width = document.getelementbyid('wrapper').offsetwidth;
$('#canvas1').attr('width', width);
$('#canvas2').attr('width', widht);
}
2. clearrect无法清除指定区域
在应用中会定时重绘canvas,每次都绘制之前都会用clearrect,将整个canvas内容清除。刚开始运行时,还没有问题,大概运行了1个小时后就会出现内容无法清除的情况,暂时没有找到原因。在上面的那个回答中提到了重设canvas的大小会清除原来绘制的内容,所以就采用了下面的方式:
[javascript]
var context = document.getelement('canvas1').getcontext('2d');
var width = $('#canvas').attr('width');
$('#canvas1').attr('width',0);
$('#canvas1').attr('width',width);
context.clearrect(0, 0, width, $('#canvas1').attr('height'));
测试了一段时间,还没有发现问题。
推荐阅读