【问题标题】:Key event background change in canvas画布中的关键事件背景更改
【发布时间】:2016-03-15 04:03:45
【问题描述】:

我正在尝试在 Canvas 中添加一个 keydown 事件,它将背景颜色更改为随机颜色,到目前为止,我没有收到任何错误,但我的功能无法正常工作。

到目前为止,我想我可能必须告诉函数将其应用于画布背景?不太确定自己的判断>

    window.addEventListener('keydown', function(event) {
  if (event.keyCode === 40) {
    fillBackgroundColor();
  }
});


function fillBackgroundColor() {
        var colors = ["red", "green", "blue", "orange", "purple", "yellow"];
        var color = colors[Math.floor(Math.random()*colors.length)];
    }

【问题讨论】:

    标签: button canvas colors background


    【解决方案1】:

    代码正在生成一种新的随机颜色并将颜色存储在局部变量中,但除此之外对颜色没有任何作用。代码需要用颜色重新绘制画布。假设您有一个 id 为“canvas”的画布...

    <canvas id="canvas" width="400" height="400"></canvas>
    

    然后 fillBackgroundColor() 方法可以更改为...

    function fillBackgroundColor() {
        var colors = ["red", "green", "blue", "orange", "purple", "yellow"];
        var color = colors[Math.floor(Math.random()*colors.length)];
        var canvas = document.getElementById("canvas");
        var context = canvas.getContext("2d");
        context.fillStyle = color;
        context.fillRect(0, 0, canvas.width, canvas.height);
    }
    

    请注意,此代码使用随机背景颜色完全重新绘制画布。如果您已经在画布上绘制了任何前景对象,那么您还必须重新绘制这些前景对象。

    【讨论】:

    • 我确实事先在画布上画了形状之类的,没有办法只画背景吗?或者我可以编写一个函数,在按下按钮时重绘我的形状?
    • Canvas 使用画家模型。想象一个画家使用画笔将颜料涂抹在物理画布上。每个新的画笔描边都会在任何现有的油漆之上添加新的油漆。没有办法取代最早的油漆层。一种典型的方法是使用单个场景渲染函数来绘制整个场景(包括背景和前景)。当你需要改变一些东西(例如背景颜色)时,你可以调用这个场景渲染函数来重绘一切。
    猜你喜欢
    • 1970-01-01
    • 2014-03-01
    • 2019-12-21
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多