第二个HTML画布未呈现

时间:2019-03-01 14:51:39

标签: javascript canvas

我现在正在关注一个使用画布的教程,并且每次我想将每个教程都保留在同一页面上时,该教程人员每次都在画布上绘画,因此从画布中获取了代码一个剧集,下面是另一幅画布,其中包含第二个教程的代码。在这里:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Page Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" media="screen" href="style.css">
    <script src="main.js"></script>
</head>

<body>
    <div>
        <canvas id="canvas"></canvas>
    </div>
    <div>
        <canvas id="canvas2"></canvas>
    </div>
</body>

</html>



window.onload = function () {
    /** @type {CanvasRenderingContext2D} */
    var canvas = document.getElementById("canvas");
    var context = canvas.getContext("2d");
    var width = canvas.width = window.innerWidth / 2;
    var height = canvas.height = window.innerHeight / 2;

    context.fillRect(0, 0, width, height);


    for (var index = 0; index < 100; index++) {
        context.beginPath();
        context.moveTo(Math.random() * width, Math.random() * height);
        context.lineTo(Math.random() * width, Math.random() * height);
        context.strokeStyle = "#FFFF00";
        context.stroke();
    }

    var canvas2 = document.getElementById("canvas2");
    var context2 = canvas2.getContext("2d");
    var width2 = canvas2.width = window.innerWidth / 2;
    var height2 = canvas2.height = window.innerHeight / 2;
    context2.translate(window.innerWidth, window.innerHeight)
    context2.fillRect(0, 0, width, height);
    for (var angle = 0; angle < Math.PI * 2; angle += .01) {
        console.log(Math.sin(angle));
        var x = angle * 200;
        var y = Math.sin(angle) * 200;
        context2.fillStyle = "green"
        context2.fillRect(x, y, 5, 5)
    }
}

在第一个画布上我绘制随机线,在第二个画布上应显示一个正弦波(由小矩形组成),但它没有渲染,但没有错误,并且在我控制台记录它们时值是正确的。我似乎无法在MDN中找到答案,而不是W3

1 个答案:

答案 0 :(得分:0)

您正在平移第二个画布,这将导致以下所有绘制在画布坐标之外进行渲染。删除翻译,一切都会好起来。

P.S。您正在使用第二张画布清除第一个画布的尺寸,这可能会引起问题。通常,将变量命名为width1会导致错误。重命名它们/移到函数中以避免将来出现此类错误。