HTML按键删除旧画布

HTML按键删除旧画布,html,canvas,keydown,Html,Canvas,Keydown,当我点击“空格”时,下面的代码应该会使画布出现。每次我点击“空间”,它就会删除旧的画布并绘制一个新的画布(位置在每次点击时从6种不同的可能性中选择) 我对代码有一个问题,因为它不会删除旧画布,并继续一个接一个地绘制它们。 我怎样才能解决这个问题 <html> <head> </head> <link rel="stylesheet" href="cssFiles/blackBackground.css"> <script

当我点击“空格”时,下面的代码应该会使画布出现。每次我点击“空间”,它就会删除旧的画布并绘制一个新的画布(位置在每次点击时从6种不同的可能性中选择)

我对代码有一个问题,因为它不会删除旧画布,并继续一个接一个地绘制它们。 我怎样才能解决这个问题

<html>
  <head>
  </head>

  <link rel="stylesheet" href="cssFiles/blackBackground.css">

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>

  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>

  <canvas id="myCanvas" width="1260" height="1000" style="border:1px solid red;"></canvas>

    <script>

    var circle = [[-350,-300],[-350,0],[-350,300],[350,-300],[350,0],[350,300]];
    $(document).ready(function() {

        document.addEventListener("keydown", function (e) {


             if  (e.keyCode === 32) { // space is pressed

                var idx_circle = Math.floor(Math.random() * 6) 
                drawCircle(circle[idx_circle][0],circle[idx_circle][1],2.5,1);
              }    

        });
      })

     function drawCircle(centerX,centerY, scaleX, scaleY){

  var canvas = document.getElementById('myCanvas');
  var context = canvas.getContext('2d');
  var radius = 120;

  // save state
 context.save();

  // translate context
  context.translate(canvas.width/2 , canvas.height/2 );

  // draw circle which will be stretched into an oval
  context.beginPath();
  context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);

  // restore to original state
  context.restore();

  // apply styling
  context.fillStyle = 'white';
  context.fill();
  context.lineWidth = 20;
  context.strokeStyle = 'white';
  context.stroke();
}


    </script>


  </body>
</html>      

变量圆=[-350,-300],-350,0],-350300],[350,-300],[350,0],[350300];
$(文档).ready(函数(){
文件.添加的文件列表器(“键控”,功能(e){
如果(e.keyCode==32){//按下空格
var idx_circle=Math.floor(Math.random()*6)
拉丝圈(圈[idx_圈][0],圈[idx_圈][1],2.5,1);
}    
});
})
函数drawCircle(centerX、centerY、scaleX、scaleY){
var canvas=document.getElementById('myCanvas');
var context=canvas.getContext('2d');
var半径=120;
//拯救国家
context.save();
//翻译语境
context.translate(canvas.width/2,canvas.height/2);
//画一个将被拉伸成椭圆形的圆圈
context.beginPath();
弧(centerX,centerY,半径,0,2*Math.PI,false);
//恢复到原始状态
restore();
//应用样式
context.fillStyle='white';
context.fill();
context.lineWidth=20;
context.strokeStyle='white';
stroke();
}

在绘制圆之前,必须使用方法清除画布

context.clearRect(0, 0, canvas.width, canvas.height);

var循环=[
[-350, -300],
[-350, 0],
[-350, 300],
[350, -300],
[350, 0],
[350, 300]
];
文件.添加的文件列表器(“键控”,功能(e){
如果(e.keyCode==32){//按下空格
var idx_circle=Math.floor(Math.random()*6);
drawCircle(圆圈[idx_circle][0],圆圈[idx_circle][1],2.5,1);
}
});
函数drawCircle(centerX、centerY、scaleX、scaleY){
var canvas=document.getElementById('myCanvas');
var context=canvas.getContext('2d');
var半径=120;
//透明帆布
clearRect(0,0,canvas.width,canvas.height);
//拯救国家
context.save();
//翻译语境
context.translate(canvas.width/2,canvas.height/2);
//画一个将被拉伸成椭圆形的圆圈
context.beginPath();
弧(centerX,centerY,半径,0,2*Math.PI,false);
//应用样式
context.fillStyle='red';
context.fill();
context.lineWidth=20;
context.strokeStyle='black';
stroke();
//恢复到原始状态
restore();
}

谢谢,我已经试过了,但是我用错地方了!接下来,如果我想检测到对圆圈的点击,我如何区分画布和我正在绘制的圆圈?完成:)接下来,如果我想检测到对圆圈的点击,我如何区分画布和我正在绘制的圆圈?嗯。。别介意,那是完全不同的问题。你应该问一个新的问题,并提供更多的细节,而不是在评论部分问:)