1
resposta

Como fazer um coração pulsante?

Pessoal, pensei em fazer um coração pulsante, porém fiquei com dúvida quanto ao triângulo já que usa três coordenadas diferentes... Qual seria a condição para startar um +sentido e um - sentido?

<meta charset="UTF-8">

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


<script>

    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');
    var audio = document.querySelector('audio');

    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 desenhaTriangulo(x,y,cor){

        pincel.fillStyle = cor;
        pincel.beginPath();
        pincel.moveTo(70,100);
        pincel.lineTo(160,100);
        pincel.lineTo(x,y);
        pincel.fill();

    }

    function limpaTela() {

        pincel.clearRect(0, 0, 600, 400);
    }

    var sentido = 1;
    raio = 30; //quero que o raio fique entre 30 e 40;

    function pulsaBolinha(){
        limpaTela();

    if(raio>40){
        sentido = -1;
    } else if(raio<30){
        sentido = +1;
    }

    desenhaCirculo(100,100,raio,"red");
    desenhaCirculo(130,100,raio,"red");

    raio = raio + sentido;

    desenhaTriangulo(115,170,"red");

    }



    setInterval(pulsaBolinha,50);




</script>
1 resposta

Fala, Igor! Tudo bem? Espero que sim!!!

Para pulsar o triângulo juntamente com a bolinha, vamos fazer as seguintes adaptações:

  • Primeiro vamos declarar as variáveis "x" e "y" fora da função:
var sentido = 1;
 raio = 30; //quero que o raio fique entre 30 e 40;
 x = 115;
 y = 190;

Depois, dentro da função pulsaBolinha vamos acrescentar o mesmo que você fez com o raio, e dentro da função que está invocando, altere os valores pelas variáveis :

        desenhaTriangulo(x, y, "red");

        x, y = (x, y) + sentido;

Agora é só rodar!!!

Espero ter ajudado, Igor!

Bons estudos e vamos em frente!!!