Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

[Duda] no cambia de color al dar click (paleta)

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

<script>
    var pantalla = document.querySelector('canvas');
    var pincel = pantalla.getContext('2d');

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

    var xRojo = 10;
    var xVerde = 60;
    var xAzul = 110;
    var coordenadaY = 10;

    function dibujarCuadrado(x,y,color) {
        pincel.fillStyle = color;
        pincel.fillRect(x, y, 50, 50);
        pincel.strokeStyle = 'white';
        pincel.strokeRect(x, y, 50, 50);
    }

    dibujarCuadrado(xRojo,coordenadaY,'red');
    dibujarCuadrado(xVerde,coordenadaY,'green');
    dibujarCuadrado(xAzul,coordenadaY,'blue');

    var puedoDibujar = false;
    var colorActual = 'blue';

    function seleccionarColor(evento) {
        var x = evento.pageX - pantalla.offsetLeft;
        var y = evento.pagey - pantalla.offsetTop;

        if((x > 10 & x < 60 ) && (y > 10 & y < 60)){
            colorActual = 'red';
            console.log(colorActual)
        }
        else if((x > 60 & x < 110) &&
                (y < 60 & y > 10)){
            colorActual = 'green';
        }
        else if((x > 110 & x < 160) &&
                (y < 60 & y > 10)){
            colorActual = 'blue';
        }
    }

    function dibujarCirculo(evento) {
        if(puedoDibujar) {
            var x = evento.pageX - pantalla.offsetLeft;
            var y = evento.pageY - pantalla.offsetTop;
            pincel.fillStyle = 'blue';
            pincel.beginPath();
            pincel.arc(x, y, 5, 0, 2*Math.PI);
            pincel.fill();
        }
        if(x>10 && x < 160 && y > 10 && y < 60) {
            puedoDibujar = false;
        }
    }

    function habilitarDibujo() {
        puedoDibujar = true;
    }

    function deshabilitarDibujo() {
        puedoDibujar = false;
    }

    pantalla.onmousedown = habilitarDibujo;
    pantalla.onmouseup = deshabilitarDibujo;
    pantalla.onmousemove = dibujarCirculo;
    pantalla.onclick = seleccionarColor;


</script>
2 respuestas
solución!

Hola!

Veo qeu hay un error el tu función seleccionarColor(evento), especificamente en tu variable y ya que la tienes var y = evento.pagey - pantalla.offsetTop; debiendo ser var y = evento.pageY - pantalla.offsetTop;, asimismo, en tu función dibujarCirculo(evento) tienes pincel.fillStyle = 'blue'; debiendo ser pincel.fillStyle = colorActual;, por último, te sugiero que en tu función dibujarCirculo(evento) primero obtengas los valores x y y, posteriormente valides el área de la paleta de colores y finalmente valides si puede dibujar quedando de la siguiente manera:

function dibujarCirculo(evento) {
        var x = evento.pageX - pantalla.offsetLeft;
        var y = evento.pageY - pantalla.offsetTop;
        if(x>10 && x < 160 && y > 10 && y < 60) {
            puedoDibujar = false;
        }
        if(puedoDibujar) {            
            pincel.fillStyle = colorActual;
            pincel.beginPath();
            pincel.arc(x, y, 5, 0, 2*Math.PI);
            pincel.fill();
        }        
    }

Lo anterior, debido a que, como lo tienes actualmente también funciona, solo que la hacer el primer click en la paleta, se estaría dibujando un circulo

gracias por la recomendación, no me había dado cuenta de esos errores. ya los corregi y funciona perfectamente.