在Canvas中,可以使用scale()方法来改变图形大小(即缩放)。不过scale()方法是有一定副作用的,它除了改变图形大小之外,还会改变其他属性如线条宽度(即lineWidth)、左上角坐标等。
看下面一段代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>scale()方法的副作用</title>
<script>
function $(id){
return document.getElementById(id);
}
window.οnlοad=function(){
var cv=$('canvas');
var cxt=cv.getContext('2d');
cxt.lineWidth=4;
cxt.strokeStyle='hotpink';
cxt.strokeRect(30,30,50,50);
//图形放大
$('btn-big').οnclick=function(){
cxt.scale(1.5,1.5);
cxt.strokeRect(30,30,50,50);
};
};
</script>
</head>
<body>
<canvas id="canvas" width='500' height='500' style='border:1px solid grey;'></canvas><br />
<input type="button" id="btn-big" value='放大' />
</body>
</html>
多次点击“放大”按钮之后,在浏览器中的预览效果如下:
按照预期效果,图形放大之后,线条宽度和左上角坐标都应该不变才对。但是在这里,每次放大之后,线条宽度和左上角坐标都会变为原来的2倍。
总结一下,scale()方法会改变图形的以下几点:
(1)左上角坐标
(2)宽度和高度
(3)线条宽度
知道这些,可以让我们更加深入地了解scale()方法的本质以及避免出现一些低级的bug。