-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.js
More file actions
171 lines (145 loc) · 5.42 KB
/
main.js
File metadata and controls
171 lines (145 loc) · 5.42 KB
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
var canvas = document.getElementById('canvas')
var context
var imagen;
var archivo
window.onload = (event)=>{
canvas = document.getElementById('canvas');
context = canvas.getContext('2d');
archivo = document.getElementById('archivo');
}
function obtenerImagen(){
//cargar imagen********************************************
imagen = new Image;
imagen.onload = ()=>{
console.log('imagen cargada!')
dibujarImagenes();
}
imagen.src = URL.createObjectURL(archivo.files[0]);
/******************************************************* */
}
function dibujarImagenes(){
//Parar el mainLoop anterior
if(window.mainLoop !== null)
{
//console.log('PARO!')
clearInterval(window.mainLoop)
}
//Dibujar imagen por primera vez**************************
var px = (canvas.width - imagen.width) / 2//Posicion x inicial en el medio
var py = (canvas.height - imagen.height) / 2//Posicion y inicial en el medio
var sx = imagen.width;//tamano de imagen en x
var sy = imagen.height;//tamano de imagen en y
//Si la imagen es muy grande la encogemos un poco
if(sx > 350 || sy > 350)
{
sx = sx * 0.7
sy = sy * 0.7;
px = (canvas.width - sx) / 2;
py = (canvas.height - sy) / 2;
}else if(sx < 200 || sy < 200)//Agrandamos la imagen si es muy pequena
{
sx = sx * 1.7
sy = sy * 1.7;
px = (canvas.width - sx) / 2;
py = (canvas.height - sy) / 2;
}
context.fillStyle = 'darkgray';
context.fillRect(0, 0, canvas.width, canvas.height);
context.drawImage(imagen, px, py, sx, sy);
//****************************************************** */
//Mover imagen:****************************************************
var presionando = false
var moviendo = false;
canvas.onmousedown = (event)=>{
presionando = true
}
canvas.onmouseup = (event)=>{
presionando = false;
moviendo = false
contador = 0;//Recargamos el contador
}
var intervalo;
var mx = 0;//posicion del mouse en x
var my = 0;//posicion del mouse en y
var pdx = 0;//posicion delta del mouse en x
var pdy = 0;//posicion delta del mouse en y;
var amx = 0;//posicion anterior del mouse en x
var amy = 0;//posicion anterior del mouse en y
var contador = 0;//Se necesita para obtener la posicion inicial cuando se empieza el swipeo
canvas.onmousemove = (event)=>{
clearInterval(intervalo);
moviendo = true;
mx = event.clientX;
my = event.clientY;
intervalo = setInterval(()=>{moviendo = false;}, 1000/60)
}
/************************************************************* */
window.mainLoop = setInterval(()=>{
if(presionando == true && moviendo == true)
{
//Obtenemos la posicion actual del mouse el rpimer frame
if(contador == 0)
{
amx = px;
amy = py;
}
if(contador > 1)
{
//Calculamos la posicion delta del mouse y se lo agregamos a la posicion de la imagen
pdx = mx - amx;
pdy = my - amy;
px += pdx;
py += pdy;
//Limpiamos el canvas y dibujamos la imagen con la nueva posicion
context.fillStyle = 'darkgray';
context.fillRect(0, 0, canvas.width, canvas.height);
context.drawImage(imagen, px, py, sx, sy);
}
amx = mx;
amy = my;
contador++;
}
}, 1000/60)//60 = 60FPS
/************************************************************** */
//Resizar imagen
var porcentajeResizado = 0.1;//Se usa para scalar la imagen sin perder el aspect ratio
canvas.onmousewheel = (event)=>{
if(event.deltaY == 100)
{
//console.log('para abajo')
//limitamos al usuario para que no haga la imagen demasiado pequena
if(sx > canvas.width || sy > sy.height)
{
//Calcular el nuevo size de la imagen y ponerla en el centro
sx -= sx * porcentajeResizado;
sy -= sy * porcentajeResizado;
px = (canvas.width - sx) / 2;
py = (canvas.height - sy) / 2;
/******************************************************** */
context.fillStyle = 'darkgray';
context.fillRect(0, 0, canvas.width, canvas.height);
context.drawImage(imagen, px, py, sx, sy);
}
}else
{
//Calcular el nuevo size de la imagen y ponerla en el centro
sx += sx * porcentajeResizado;
sy += sy * porcentajeResizado;
px = (canvas.width - sx) / 2;
py = (canvas.height - sy) / 2;
/********************************************************** */
context.fillStyle = 'darkgray';
context.fillRect(0, 0, canvas.width, canvas.height);
context.drawImage(imagen, px, py, sx, sy);
//console.log('para arriba');
}
//console.log(event);
}
}
function mostrarResultado(){
var imagenAMostrar = document.getElementById('imagenMostrada');
canvas.toBlob((blob)=>{
imagenAMostrar.setAttribute('src', URL.createObjectURL(blob));
imagenAMostrar.style.display = 'block';
})
}