Pessoal, utilizei a mesma lógica do exercício anterior e deu certo. Também adotei o "pincel.fillRect" ao invés do "pincel.clearRect" para limpar a tela (somente no espaço ocupado pelo círculo), mantendo o fundo cinza.
Por fim, coloquei um comando para somente iniciar (de zero, pra não ficar esquisito) o código a partir do clique do mouse.
O problema que encontrei é que, cada vez que se clica com o mouse, ele repete a "setInterval" e aumenta a cadência da pulsação. Tentei colocar uma variável (dentro e fora da função que controlasse a cadência) e uma função if que voltasse o valor para 20, mas nada funcionou.
<canvas width="600" height="400"></canvas>
<script>
var tela = document.querySelector('canvas');
var pincel = tela.getContext('2d');
pincel.fillStyle = 'lightgray';
pincel.fillRect(0, 0, 600, 400);
function desenhaCirculo(x, y, raio, cor) {
pincel.fillStyle = cor;
pincel.beginPath();
pincel.arc(x, y, raio, 0, 2 * Math.PI);
pincel.fill();
}
function limpaTela() {
pincel.fillStyle = "lightgray";
pincel.fillRect(250, 150, 100, 100);
}
var raio = 0;
var aumenta = 1;
function atualizaTela(){
limpaTela();
if(raio > 30){
aumenta = -1;
} else if (raio < 20){
aumenta = 1;
}
desenhaCirculo(300, 200, raio, "blue");
raio = raio + aumenta;
}
function clica(){
setInterval(atualizaTela, 20);
}
tela.onclick = clica;
</script>
Valeu!