我一直在玩HTML5 Canvas,我注意到一些我无法在网上找到解决方案的东西。这是我正在玩的简单代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
</head>
<body>
<canvas id="canvas" style="border: 1px solid;" width="200" height="200"></canvas>
<br />
<button id="draw">draw</button>
<button id="clear">clear</button>
</body>
</html>
<script type="text/javascript">
(function () {
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
$("#draw").bind("click", function () {
for (var i = 0; i < 200; i++) {
context.moveTo(0, i);
context.lineTo(100, 100);
context.stroke();
}
});
$("#clear").bind("click", function () {
context.clearRect(0, 0, 200, 200);
});
} ());
</script>
每次我按下绘图时,它完成的速度似乎都呈指数减速。有人知道为什么会这样吗?
它通过IE减慢最多。 Chrome似乎每次点击都会更快地完成它,但你仍然可以注意到速度降低。
答案 0 :(得分:16)
<canvas>
元素跟踪当前路径(即点,线和曲线的集合)。 canvas.moveTo
,canvas.lineTo
和canvas.stroke
都在当前路径上运行。每次拨打canvas.moveTo
或canvas.lineTo
时,您都会添加到当前路径。随着路径变得越来越复杂,绘图变得越来越慢。
您可以致电canvas.beginPath()
清除路径。在绘制函数开始时执行此操作应该摆脱减速。