Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
3
respuestas

Diseñar con el mouse [Personalizable]

Hola, por cuestion de tiempo no habia podido terminar el codigo de este ejercicio:

<!DOCTYPE html>
<html lang="es">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<!-- https://github.com/jramo5 -->

<body>

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

    <script>

        let pantalla = document.querySelector('canvas');
        let pincel = pantalla.getContext('2d');
        let colores = ["red", "green", "blue"];
        let puedoDibujar = false;
        let colorDefault = 0;
        let widthAcumulado = 0;
        let paleta = [];
        let ultimoObjeto = 0;
        let ultimoId = 0;

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

        function paletaColores() {
            colorDefault++
            if (colorDefault > colores.length) {
                colorDefault = 0;
            }
        }

        function crearPaleta(x, y) {
            for (let i = 0; i < colores.length; i++) {
                pincel.fillStyle = colores[i];
                pincel.fillRect(widthAcumulado, 0, x, y);
                widthAcumulado += x;
                //Creo un array que representa cada color de la paleta
                paleta.push({
                    id: i, // 0
                    color: colores[i], // 1
                    anchoInicial: x, // 2
                    altura: y, // 3
                    anchoTotal: widthAcumulado // 4
                });
            }
        }


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

            // Aqui se cuantos indices tiene mi array desde 
            // 0 al numero de indice atraves del id
            ultimoObjeto = paleta[paleta.length - 1];
            ultimoId = ultimoObjeto.id;

            if (y > paleta[ultimoId].altura || x > paleta[ultimoId].anchoTotal) {
                if (puedoDibujar) {
                    pincel.fillStyle = paleta[colorDefault].color;
                    pincel.beginPath();
                    pincel.arc(x, y, 5, 0, 2 * 3.14);
                    pincel.fill();
                }
            }
        }

        crearPaleta(50, 50)

        pantalla.onmousemove = dibujarCirculo;

        function habilitarDibujar() {
            puedoDibujar = true;
        }

        function deshabilitarDibujar() {
            puedoDibujar = false;
        }


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

            for (let i = 0; i < paleta.length; i++) {
                if (x < paleta[i].anchoTotal && y < paleta[i].altura) {
                    colorDefault = paleta[i].id;
                    break;
                }
            }
        }

        pantalla.onmousedown = habilitarDibujar;

        pantalla.onclick = colorEscogido;

        pantalla.onmouseup = deshabilitarDibujar;

    </script>

</body>

</html>

Lo hice bastante interactivo, pudiendo hacerle algunos cambios y pedirle al usuario los colores, cambiando algunas lineas del codigo, se puede agregar mas colores en el array colores, y automaticamente aparece en pantalla, y siguiendo tambien la posicion y coordenadas definir con un evento la ubicacion exacta de las coordenadas y asi poder saber el color exacto que el usuario haya escogido.

Espero tu feedback encantado, y saludos.

3 respuestas

Asi seria la version donde se le pide al usuario la paleta de colores

<!DOCTYPE html>
<html lang="es">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

<!-- https://github.com/jramo5 -->

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

    <script>

        let pantalla = document.querySelector('canvas');
        let pincel = pantalla.getContext('2d');
        let puedoDibujar = false;
        let colorDefault = 0;
        let widthAcumulado = 0;
        let paleta = [];
        let ultimoObjeto = 0;
        let ultimoId = 0;

        let colores = [];

        alert("Ingresa hasta 5 colores para crear la paleta. Declara los colores en Ingles")
        for(let i = 1; i < 6; i++){
            let colorUsuario = prompt("Ingresa el " + i + " color")
            colores.push({
            color: colorUsuario
            });
        }


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

        function paletaColores() {
            colorDefault++
            if (colorDefault > colores.length) {
                colorDefault = 0;
            }
        }

        function crearPaleta(x, y) {
            for (let i = 0; i < colores.length; i++) {
                pincel.fillStyle = colores[i].color;
                pincel.fillRect(widthAcumulado, 0, x, y);
                widthAcumulado += x;
                //Creo un array que representa cada color de la paleta
                paleta.push({
                    id: i, // 0
                    color: colores[i].color, // 1
                    anchoInicial: x, // 2
                    altura: y, // 3
                    anchoTotal: widthAcumulado // 4
                });
            }
        }


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

            // Aqui se cuantos indices tiene mi array desde 
            // 0 al numero de indice atraves del id
            ultimoObjeto = paleta[paleta.length - 1];
            ultimoId = ultimoObjeto.id;

            if (y > paleta[ultimoId].altura || x > paleta[ultimoId].anchoTotal) {
                if (puedoDibujar) {
                    pincel.fillStyle = paleta[colorDefault].color;
                    pincel.beginPath();
                    pincel.arc(x, y, 5, 0, 2 * 3.14);
                    pincel.fill();
                }
            }
        }

        crearPaleta(50, 50)

        pantalla.onmousemove = dibujarCirculo;

        function habilitarDibujar() {
            puedoDibujar = true;
        }

        function deshabilitarDibujar() {
            puedoDibujar = false;
        }


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

            for (let i = 0; i < paleta.length; i++) {
                if (x < paleta[i].anchoTotal && y < paleta[i].altura) {
                    colorDefault = paleta[i].id;
                    break;
                }
            }
        }

        pantalla.onmousedown = habilitarDibujar;

        pantalla.onclick = colorEscogido;

        pantalla.onmouseup = deshabilitarDibujar;

    </script>

</body>

</html>

Wow bro, eres bastante bueno programando una duda ¿ya habias llevado cursos antes de programacion o es la primera vez que empiezas a programar? Es que para mi es la primera y si se me ah hecho un poco complicado

Buen aporte Felicidades!