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

Dúvida sobre a função anônima

Boa tarde! Tudo bem? Espero que sim!

Gostaria de saber o que estou fazendo de errado na minha função anônima, esses são os códigos:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style type="text/css">
body {
background-color: black;
}
h1 {

}

p{

}

canvas {
    position:absolute;
    left:35%;
    top:15%;
    margin-left:-120px;
    margin-top:-40px;
}


</style>
<body>
<canvas height="600" width="800"></canvas>

<script>


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

    var c = false; 

    function alert1() {
            alert('thats worked!');
        }


    if (c) {
        alert('Thats worked!'); 
    }

    tela.onclick = function(){
        c=true;
    }



</script>


</body>
</html>

Quando eu vinculo a função alert1 ao tela.onclick funciona, mas quando tento fazer uma função anônima no tela.onclick (que nem o código acima) não funciona...

Agradeço desde já!

4 respostas

Oi Julio

Seu código não tem erro, só não irá executar tanto o alert1() ou o if(c).

A parte que está fora da função anônima não irá executar quando você clicar na tela. Você só irá executar o que está dentro da função anônima, ou seja só está alterando a variável c para true.

Se quer que algo seja executado insira dentro da função anônima, por exemplo utilizando sua construção:

tela.onclick = function () {
    alert1();
  };

Oi Guilherme!

Ainda não entendi uma coisinha, mas quando a função anônima altera c para true, o if que está em cima não deveria ser ativado mostrando o alert?? Ou eu preciso colocar esse if dentro da função anônima também??

O instrutor fez parecido, ele não usou o ".onclick" mas a mecânica de false e true foi praticamente a mesma, esses foram os códigos dele:

<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);

    var desenha = false;

  // atribuindo diretamente a função anônima
   tela.onmousemove = function(evento) {

        if(desenha) {
            var x = evento.pageX - tela.offsetLeft;
            var y = evento.pageY - tela.offsetTop;
            pincel.fillStyle = 'blue';
            pincel.beginPath();
            pincel.arc(x, y, 10, 0, 2 * 3.14);
            pincel.fill();
        }
        console.log(x + ',' + y);
    }

    tela.onmousedown = function() {

        desenha = true;
    }

     tela.onmouseup = function() {

        desenha = false;
    }

</script>

Agradeço desde já!

solução!

Oi Julio

É isso mesmo, você precisa inserir o IF dentro da função anônima, aquele IF do seu código não será executado mais, somente quando você atualizar a página.

Repare que o IF do professor está dentro da função anônima e vinculada ao mouse move

Ahhh entendi, agora funcionou!

Obrigado Guilherme!