Ayuda para delimitar un área de canvas y capturar un evento
Publicado por Johanna (2 intervenciones) el 01/09/2022 01:32:58
Hola a todos no se si alguien pueda ayudarme con lo siguiente, estoy tratando de crear un mini paint en canvas, mi problema es el siguiente no puedo hacer que no se pueda dibujar sobre la paleta de colores, y no logro resolver como hacer para que se puedan seleccionar los colores que establecí. Mi código es el siguiente
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
<canvas width="600" height="400"></canvas>
<br>
<br>
<button><b>Borrar Dibujo</b></button>
<script>
var pantalla = document.querySelector('canvas');
var pincel = pantalla.getContext('2d');
pincel.fillStyle = 'lightgrey';
pincel.fillRect(0, 0, 600, 400);
var puedoDibujar = false;
var x = 0
var y = 0
var colores = ["red","green","blue","white","black","pink"];
var borrar = document.querySelector('button');
var sizeCuadrados = 40
var hasta = colores.length * sizeCuadrados //tamaño total de la paleta de colores
var colorActual = "blue"
var contador = 0
function dibujarCirculo(evento) {
if(puedoDibujar) {
var x = evento.pageX - pantalla.offsetLeft;
var y = evento.pageY - pantalla.offsetTop;
pincel.fillStyle = colorActual;
pincel.beginPath();
pincel.arc(x, y, 5, 0, 2 * Math.PI);
pincel.fill();
}
}
function habilitarDibujar() {
puedoDibujar = true;
}
function deshabilitarDibujar() {
puedoDibujar = false;
}
function dibujarCuadrado(x,y,color){
var pantalla = document.querySelector("canvas");
var pincel = pantalla.getContext("2d");
pincel.fillStyle = color;
pincel.fillRect(x,y,sizeCuadrados,sizeCuadrados);
}
function paletaColores(){
while(x < hasta){
for(let i=0; i<colores.length;i++){
dibujarCuadrado(x,y,colores[i]);
x = x + sizeCuadrados;
contador ++
}
}
}
function delimitarAreaColores(x,y){
sizeCuadrados = 40
hasta = colores.length * sizeCuadrados
if((coordenadaX >= 0 && coordenadaX < (hasta + 15)) &&
(coordenadaY >= 0 && coordenadaY < (sizeCuadrados + 15))) {
return false;
}
else {
return true;
}
}
function capturarMovimientoMouse(evento){
var x = evento.pageX - pantalla.offsetLeft;
var y = evento.pageY - pantalla.offsetTop;
if(delimitarAreaColores(x,y)){
dibujarCirculo(x,y,colorActual)
}
}
function seleccionarColor(evento) {
var x = evento.pageX - pantalla.offsetLeft;
var y = evento.pageY - pantalla.offsetTop;
//Cada condición altera el color de la variable colorActual
//Comenzamos por la condición del eje Y que es común para todas
if (y > yCuadrados && y < (yCuadrados + tamanhoCuadrados)) {
if(x > xRojo && x < (xRojo + tamanhoCuadrados)) {
colorActual = "red";
console.log(colorActual);
} else if (x > xVerde && x < (xVerde + tamanhoCuadrados)) {
colorActual = "green";
} else if(x > xAzul && x < (xAzul + tamanhoCuadrados)) {
colorActual = "blue";
}
}
}
function limpiarPantalla(){
var pantalla = document.querySelector('canvas');
var pincel = pantalla.getContext('2d');
pincel.clearRect(0,0,600,400);
pincel.fillStyle = 'lightgrey';
pincel.fillRect(0, 0, 600, 400);
}
function pantallaPrincipal(){
x = 0
y = 0
colores = ["red","green","blue","white","black","pink"];
sizeCuadrados = 40
hasta = colores.length * sizeCuadrados;
limpiarPantalla();
paletaColores();
}
paletaColores();
pantalla.onmousemove = dibujarCirculo;
pantalla.onmousedown = habilitarDibujar;
pantalla.onmouseup = deshabilitarDibujar;
borrar.onclick = pantallaPrincipal;
pantalla.onclick = seleccionarColor;
</script>
Valora esta pregunta


0