Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Por que meu código não funcionou

<meta charset="utf-8">
<canvas width="600" height="400"></canvas>

<script>
    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');
    pincel.fillStyle = 'grey';
    pincel.fillRect(0, 0, 600, 400);

      function desenhaCirculo(evento) {

           var x = evento.pageX - tela.offsetLeft;
           var y = evento.pageY - tela.offsetTop;
           evento.shiftKey = true;

           if (evento.shiftKey) {   
        pincel.fillStyle = 'blue';
        pincel.beginPath();
        pincel.arc(x, y, 30, 0, 2 * 3.14);
        pincel.fill();
        console.log(x + ',' + y);
        } else {
        pincel.fillStyle = 'blue';
        pincel.beginPath();
        pincel.arc(x, y, 10, 0, 2 * 3.14);
        pincel.fill();
        console.log(x + ',' + y);
        }
    }

    tela.onclick = desenhaCirculo;

</script>
4 respostas

Olá meu aluno! Eu testei seu código, funcionou. Eu segurei a tecla SHIFT e ao clicar no canvas com ela pressionada desenhou uma bola maior.

Tem uma instrução desnecessária, a evento.shiftKey = true.

Removendo essa instrução e indentando seu código para fiar mais legível:

<meta charset="utf-8">
<canvas width="600" height="400"></canvas>

<script>
  var tela = document.querySelector('canvas');
  var pincel = tela.getContext('2d');
  pincel.fillStyle = 'grey';
  pincel.fillRect(0, 0, 600, 400);

  function desenhaCirculo(evento) {

      var x = evento.pageX - tela.offsetLeft;
      var y = evento.pageY - tela.offsetTop;

      if (evento.shiftKey) {
          pincel.fillStyle = 'blue';
          pincel.beginPath();
          pincel.arc(x, y, 30, 0, 2 * 3.14);
          pincel.fill();
          console.log(x + ',' + y);
      } else {
          pincel.fillStyle = 'blue';
          pincel.beginPath();
          pincel.arc(x, y, 10, 0, 2 * 3.14);
          pincel.fill();
          console.log(x + ',' + y);
      }
  }

  tela.onclick = desenhaCirculo;
</script>

Inclusive podemos simplificar seu código desta forma:

<meta charset="utf-8">
<canvas width="600" height="400"></canvas>

<script>

  var tela = document.querySelector('canvas');
  var pincel = tela.getContext('2d');
  pincel.fillStyle = 'grey';
  pincel.fillRect(0, 0, 600, 400);

  function desenhaCirculo(evento) {

      var x = evento.pageX - tela.offsetLeft;
      var y = evento.pageY - tela.offsetTop;

      pincel.fillStyle = 'blue';
      pincel.beginPath();     

      if (evento.shiftKey) {
          pincel.arc(x, y, 30, 0, 2 * 3.14);
      } else {
          pincel.arc(x, y, 10, 0, 2 * 3.14); 
      }
      pincel.fill();
      console.log(x + ',' + y);
  }

  tela.onclick = desenhaCirculo;
</script>

Você pode simplificá-lo ainda mais:

<meta charset="utf-8">
<canvas width="600" height="400"></canvas>

<script>

  var tela = document.querySelector('canvas');
  var pincel = tela.getContext('2d');
  pincel.fillStyle = 'grey';
  pincel.fillRect(0, 0, 600, 400);

  function desenhaCirculo(evento) {

      var x = evento.pageX - tela.offsetLeft;
      var y = evento.pageY - tela.offsetTop;
      var tamanho = 10;

      pincel.fillStyle = 'blue';
      pincel.beginPath();     

      if (evento.shiftKey) {
          tamanho = 30;
      } 

      pincel.arc(x, y, tamanho, 0, 2 * 3.14);
      pincel.fill();
      console.log(x + ',' + y);
  }

  tela.onclick = desenhaCirculo;
</script>

Sucesso e bom estudo meu aluno!

Pois então, essa foi minha tentativa de responder ao exercício. E eu executava e executava e não respondia aos comandos, ainda que o console não apresentasse erros. Agora cheguei em casa e funcionou realmente. Pode ser alguma diferença do editor ou do computador? Muito obrigado Professor!

solução!

Oi Israel. Olha, não vamos saber a causa. Uma coisa possível é você não ter salvo o arquivo antes de testar, mas não tem como saber. O mais importante é que você testou o código e funcionou. Fique ligado nas dicas que dei para enxugar o código para ele ficar melhor do que já é.

Sucesso e bom estudo meu aluno!

Sim, foi simplificá-lo. Só mantive como estava porque eu não conseguia identificar o eventual erro.

Até a próxima!