Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Diseñando con el Mouse, alguna sugerencia

este es mi codigo, funciona, pero quisiera saber si le mejorarian algo. Gracias

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

    pincel.fillStyle = 'red';
    pincel.fillRect(0, 0, 50, 50);

    pincel.fillStyle = 'green';
    pincel.fillRect(50, 0, 50, 50);

    pincel.fillStyle = 'blue';
    pincel.fillRect(100, 0, 50, 50);


    var puedoDibujar = false;
    var colores = ["red","green","blue"]
    var colorActual = "blue"

    function dibujarCirculo(evento) {

        if(puedoDibujar) {
            var x = evento.pageX - pantalla.offsetLeft;
            var y = evento.pageY - pantalla.offsetTop;
            if ((x >0) &&
                (x <155) &&
                (y > 0)&&
                (y < 55)) {

            }
            else {
                pincel.fillStyle = colorActual;
                pincel.beginPath();
                pincel.arc(x, y, 5, 0, 2 * 3.14);
                pincel.fill();
            }
        }

    }

    pantalla.onmousemove = dibujarCirculo;

    function habilitarDibujar() {

            puedoDibujar = true;
        }

    function deshabilitarDibujar() {

        puedoDibujar = false;
    }

    pantalla.onmousedown = habilitarDibujar;

    pantalla.onmouseup = deshabilitarDibujar;



    function cambiarColor(evento){
        var x = evento.pageX - pantalla.offsetLeft;
        var y = evento.pageY - pantalla.offsetTop;
            if ((x < 50) &&
                 (y < 50))  {
                 colorActual = colores[0]
                }  

            else if ((x > 50) &&
            (x < 100) &&
            (y < 50)) {
                colorActual = colores[1]
            }    
            else if ((x > 100) &&
            (x < 150) &&
            (y < 50)) {
                colorActual = colores[2]
            }    
    }

    pantalla.onclick = cambiarColor;



</script>
1 respuesta

Hola Eduardo,

Está muy bien tu código. Las 2 cosas que se podrían optimizar (principalmente si más adelante se quisiera agregar más colores en la paleta) son:

1) Tener una función para crear la paleta de colores, que itere con un bucle for cada color y lo vaya dibujando en el canvas.

2) La función cambiarColor() también podría tener una iteración con un bucle for.

Te comparto mi código para que lo puedas ver. Pero insisto, tu código está excelente y estas dos cosas que te nombro ayudarían solo en caso que se agreguen más colores a la paleta.

Un saludo y a seguir codeando =)

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

<script>
    function crearPaleta(paleta) {
        x = 0;
        for (var i = 0; i < paleta.length; i++) {
            pincel.fillStyle = paleta[i]
            pincel.fillRect(x, 0, dimensionPaleta, dimensionPaleta)
            x += dimensionPaleta
        }
    }

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

        var paletaInicialX = 0;
        var paletaFinalX = dimensionPaleta

        for(var i = 0; i < paleta.length; i++){
            if ((x > paletaInicialX) && (x <= paletaFinalX) && (y <= dimensionPaleta)) {
                color = (paleta[i])
                console.log(color)
            }
            paletaInicialX += dimensionPaleta
            paletaFinalX += dimensionPaleta
        }
    }

    function dibujarCirculo(evento) {
        if (puedoDibujar) {
            var x = evento.pageX - pantalla.offsetLeft;
            var y = evento.pageY - pantalla.offsetTop;
            pincel.fillStyle = color;
            pincel.beginPath();
            if (x > dimensionPaleta * paleta.length || y > dimensionPaleta) {
                pincel.arc(x, y, 5, 0, 2 * 3.14);
            }
            pincel.fill();
        }
    }

    function habilitarDibujar() {
        puedoDibujar = true;
    }

    function deshabilitarDibujar() {
        puedoDibujar = false;
    }

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

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

    var puedoDibujar = false;
    var dimensionPaleta = 50;

    var paleta = ["blue", "green", "red"];
    var color = "blue";

    crearPaleta(paleta)  ;  

    pantalla.onclick = cambiarColor;

    pantalla.onmousemove = dibujarCirculo;

    pantalla.onmousedown = habilitarDibujar;

    pantalla.onmouseup = deshabilitarDibujar;

</script>