Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

DESSA MANEIRA NUNCA FUNCIONARÁ (setInterval / clearInterval)

Estou um bom tempo estudando como loopar o código com setInterval e o clearInterval, porem sem sucesso. Talvez com algum incremento de arrays e/ou id(#) nas variáveis seja possível, mas não possuo tal conhecimento. (alerta cuidado epiléticos)

<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);
    var raio =20 


    function desenhaCirculo(x, y, raio, cor) {

        pincel.fillStyle = cor;
        pincel.beginPath();
        pincel.arc(x, y, raio, 0, 2 * Math.PI);
        pincel.fill();

        if(raio == 30)
        {
            var voltar = setInterval(volta,100)
            clearInterval(ir)

        }
        if(raio == 20)
        {

            var ir = setInterval(vai,100)

        }
    }

    function limpaTela() {

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

function vai()
{
    limpaTela()
    desenhaCirculo(300,200,raio,"red")
    raio = raio +1
}
function volta()
{
    limpaTela()
    desenhaCirculo(300,200,raio,"blue")
    raio = raio -1 
}
setInterval(vai,100)


</script>

embora tenha conseguido evoluir o código para não causar um ataque epilético em alguém

<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);
    var raio =20 

    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.clearRect(0, 0, 600, 400);
    }

function vai()
{
    limpaTela()
    desenhaCirculo(300,200,raio,"red")
    raio++
}
function volta()
{
    limpaTela()
    desenhaCirculo(300,200,raio,"blue")
    raio--
}

if(raio == 30)
{
    setInterval(volta,10)
}
if(raio == 20)
{
    setInterval(vai,10)
}

setInterval(volta,10)

</script>

e ate mesmo conseguido algumas repetições

<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);
    var raio =20

    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.clearRect(0, 0, 600, 400);
    }

function vai()
{
    limpaTela()
    desenhaCirculo(300,200,raio,"red")
    raio++
    if(raio == 60)
    {   
        clearInterval(ff)
        var gg = setInterval(volta,100)



    }
    function volta()
{
    limpaTela()
    desenhaCirculo(300,200,raio,"blue")
    raio--
    if(raio == 40)
    {
        clearInterval(gg)
        var ff = setInterval(vai,100)

    }

}

}

var ff = setInterval(vai,100)


</script>

não sou capaz de solucionar esse quebra cabeça com meu conhecimento atual. Fique a vontade para mexer no código e chegar a uma resposta. Sua ajuda é totalmente bem vinda !

1 resposta
solução!

Oi, Vitor! Tudo bem por aí? =)

Suas soluções ficaram muito bacanas!

O mais importante de tudo é ver o seu esforço para resolver o desafio proposto.

E em relação a isso você mandou bem demais, parabéns!

Deixo aqui uma proposta de solução para o exercício, mas é só uma proposta, existem várias outras formas válidas para o que foi proposto:

<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.clearRect(0, 0, 600, 400);
    }

    var raio = 19;

    var fatorCrescimento = 0;

    function atualizaTela() {

        limpaTela();

        if(raio > 30) {
            fatorCrescimento = -1;
        } else if (raio < 20) {
            fatorCrescimento = 1;
        }

        raio = raio + fatorCrescimento;

        desenhaCirculo(300, 200, raio, 'blue');

    }

    setInterval(atualizaTela, 20);

</script>

Continue mergulhando.

Bons estudos e até mais!