HTML5 Canvas随着每个笔划减慢并清除

时间:2012-03-04 21:17:29

标签: html5 canvas

我一直在玩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似乎每次点击都会更快地完成它,但你仍然可以注意到速度降低。

1 个答案:

答案 0 :(得分:16)

<canvas>元素跟踪当前路径(即点,线和曲线的集合)。 canvas.moveTocanvas.lineTocanvas.stroke都在当前路径上运行。每次拨打canvas.moveTocanvas.lineTo时,您都会添加到当前路径。随着路径变得越来越复杂,绘图变得越来越慢。

您可以致电canvas.beginPath()清除路径。在绘制函数开始时执行此操作应该摆脱减速。