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

Problemas para resgatar mais de um input do HTML para o JavaScript

Boa noite, galera!

Estava escrevendo um código para simular um "paint" meia boca no navegador (atividade do curso de lógica II), porém na atividade só é solicitado um campo para a escolha da cor (por meio de um input, como podem ver no código abaixo). O que foi proposto na atividade estava ok, mas tentei dar um plus no meu "paint" incluindo um input para determinar a espessura da linha que seria desenhada (por meio de outro input). A caixa para a entrada do usuário aparece e botão para enviar o texto também. Joguei um parseInt para a variavel só receber número, mas não consigo fazer funcionar. Acredito que seja o input que estou pedindo para a variável buscar, pois ela está iguala variável da paleta de cor ('input'). Não sei como aplicar duas entradas de input, se alguém puder me auxiliar.

Desde já agradeço e um ótimo fim de semana.

<canvas width="600" height="400"></canvas>
<br>
Escolha uma cor <input type="color">

<input/>
<button>Escolha a espessura da linha</button>

<script>
    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');
    var paleta = document.querySelector('input');
    var fonte = parseInt(document.querySelector('input'));
    var desenha = false;

    pincel.fillStyle = 'grey';
    pincel.fillRect(0, 0, 600, 400);

    function desenhaCirculo(evento) {

        if(desenha) {

        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;
        pincel.fillStyle = input.paleta;
        pincel.beginPath();
        pincel.arc(x, y, fonte.value, 0, 2 * 3.14);
        pincel.fill();
        console.log(x + ',' + y);
        }
    }

    tela.onmousemove = desenhaCirculo

    function habilitarDesenhar() {

        desenha = true;
    }

    function desabilitarDesenhar() {

        desenha = false;
    }

    tela.onmousedown = habilitarDesenhar;

    tela.onmouseup = desabilitarDesenhar;

</script>
2 respostas
solução!

Boa noite, Vinicius! Tudo certinho? =)

Bem bacana essa sua ideia de tentar fazer algo extra! Assim você consegue fixar e aprender mais! Parabéns! =)

Agora... Seu código está assim:

...
Escolha uma cor <input type="color">
Escolha a espessura <input>
...

Obs: Adicionei a legenda, escrito "Escolha a espessura", só para podermos diferenciar melhor cada um dos <input>. =)

Olhando um pouco mais adiante no seu código, você está fazendo o seguinte:

...
var paleta = document.querySelector("input");
...

Essa linha, como você deve ter visto, é a responsável por buscar o elemento na página! Ou seja, toda vez que escrevemos document.querySelector(...), estamos buscando um elemento na página, e o que escrevemos dentro dos parênteses é justamente o elemento que queremos buscar... O que você passava, era input, ou seja, você queria buscar o <input> da página. Mas... Observe que agora temos dois inputs! O que deve acontecer quando escrevemos esse código? Se pararmos para pensar, ele deveria nos trazer todos os elementos <input> que temos na página, mas essa função não foi implementada dessa forma, portanto o que ela irá trazer é apenas o primeiro elemento. Tudo isso para que? Isso é para você reparar que em momento algum, dentro do seu <script>, você está acessando aquele segundo input. Conseguiu perceber isso? =|

Uma solução seria você utilizar uma chamada para document.querySelectorAll(...), ao invés de document.querySelector(...). Essa nova função funciona de forma parecida, mas ele vai buscar todos os elementos que baterem com as informações que você passar lá... Mas você receberia uma "lista" e ficaria mais complexo seu código...

A solução que eu considero como mais elegante é adicionar um atributo nos seus elementos HTML, chamado de class... Assim:

...
Escolha a cor <input type="text" class="cor">
Escolha a espessura <input class="espessura">
...

Agora, ao invés de escrevermos document.querySelector("input") ou document.querySelectorAll("input"), podemos utilizar o que chamamos de seletor CSS:

document.querySelector(".cor");
document.querySelector(".espessura");

Repare que temos um ponto no começo dos parênteses e passamos o nome da classe que adicionamos no HTML!

Fazendo isso, conseguimos diferenciar cada um dos campos e você pode fazer seu tratamento de acordo com o que você precisar...

Ahh, mais um pequeno detalhe: como você está querendo uma espessura, você pode definir o segundo input como um input de números, apenas:

...
Escolha a espessura <input type="number" class="espessura">
...

Sacou? =)

Como você está fazendo os cursos de Lógica de Programação, suponho que você seja novo da área... Inicialmente, espero que esteja gostando do que está aprendendo! =)

E, em segundo lugar, eu tentei dar um overview do que precisa ser feito para que seu código comece a funcionar... Ainda há mais algumas coisas e a complexidade do seu código vai aumentar bastante. Se sentir qualquer dúvida/dificuldade, fique tranquilo. Esse código não é trivial e deve ser considerado complicado para quem está iniciando agora... O que eu lhe recomendaria é dar uma olhada, tentar entender e aplicar. Se achar que está muito difícil, siga adiante nos cursos que em breve as coisas farão um pouco mais de sentido, beleza? =)

Ahh, e se optar por continuar nesse desafio, não hesite em perguntar aqui no fórum para que nós possamos lhe ajudar, ok? =)

Abraço e bons estudos,

Fábio

Muito obrigado pela ajuda, Fábio!

Consegui implementar a solução apresentada e gostei muito das possibilidades que essa função abriu.

Até a próxima!