You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 7-animation/3-js-animation/article.md
+51-51Lines changed: 51 additions & 51 deletions
Original file line number
Diff line number
Diff line change
@@ -6,7 +6,7 @@ Por exemplo, movimentação por um caminho complexo, com uma função de tempo d
6
6
7
7
## Utilizando setInterval
8
8
9
-
A animação pode ser implmentada como uma sequência de frames (quadros) -- geralmente pequenas modificações nas propriedades de HTML/CSS.
9
+
A animação pode ser implementada como uma sequência de frames (quadros) -- geralmente pequenas modificações nas propriedades de HTML/CSS.
10
10
11
11
Por exemplo, modificando `style.left` de `0px` para `100px` movimenta o elemento. E se aumentarmos em `setInterval`, mudando por `2px` com um pequeno atraso, como 50 vezes por segundo, parecerá suave. Este é o mesmo princípio do cinema: 24 quadros por segundo é o suficiente para fazer com que pareça suave.
12
12
@@ -22,25 +22,26 @@ let timer = setInterval(function() {
22
22
Exemplo mais completo da animação:
23
23
24
24
```js
25
-
let start =Date.now() // preservar o tempo inicial
25
+
let start =Date.now();// preservar o tempo inicial
26
26
27
-
let timer =setInterval(function() {
27
+
let timer =setInterval(function() {
28
28
// quanto tempo passou desde o início?
29
-
let timePassed =Date.now() - start
29
+
let timePassed =Date.now() - start;
30
30
31
-
if (tempoPetimePassedrcorrido>=2000) {
32
-
clearInterval(timer) // finaliza a animação depois de 2 segundos
33
-
return
31
+
if (timePassed>=2000) {
32
+
clearInterval(timer);// finaliza a animação depois de 2 segundos
33
+
return;
34
34
}
35
35
36
36
// desenha a animação no momento timePassed
37
-
draw(timePassed)
38
-
}, 20)
37
+
draw(timePassed);
38
+
39
+
}, 20);
39
40
40
-
//como timePassed vai de 0 a 2000
41
-
//deixa gets values de 0 a 400px
41
+
// timePassed vai de 0 a 2000
42
+
//recebe valores de 0 a 400px
42
43
functiondraw(timePassed) {
43
-
train.style.left= timePassed /5+'px'
44
+
train.style.left= timePassed /5+'px';
44
45
}
45
46
```
46
47
@@ -105,14 +106,14 @@ O código abaixo mostra o tempo entre as 10 primeiras chamadas de `requestAnimat
@@ -123,29 +124,30 @@ Agora podemos fazer uma função de animação mais universal baseada em `reques
123
124
124
125
```js
125
126
functionanimate({ timing, draw, duration }) {
126
-
let start =performance.now()
127
+
128
+
let start =performance.now();
127
129
128
130
requestAnimationFrame(functionanimate(time) {
129
131
// timeFraction vai de 0 a 1
130
-
let timeFraction = (time - start) / duration
132
+
let timeFraction = (time - start) / duration;
131
133
if (timeFraction >1) timeFraction =1
132
134
133
135
// calcula o atual estado de animação
134
-
let progress =timing(timeFraction)
136
+
let progress =timing(timeFraction);
135
137
136
-
draw(progress) // o desenha
138
+
draw(progress);// o desenha
137
139
138
140
if (timeFraction <1) {
139
-
requestAnimationFrame(animate)
141
+
requestAnimationFrame(animate);
140
142
}
141
-
})
143
+
});
142
144
}
143
145
```
144
146
145
147
Função `animate` aceita 3 parâmetros que essencialmente descrevem a animação:
146
148
147
149
`duration`
148
-
: Tempo total da animação. Como, `1000`.
150
+
: Tempo total da animação. Exemplo, `1000`.
149
151
150
152
`timing(timeFraction)`
151
153
: Função de tempo, como a propriedade CSS `transition-timing-function` que recebe a fração de tempo percorrido (`0` no início, `1` no final) e retorna a conclusão da animação (como `y` na curva de Bezier).
@@ -158,7 +160,7 @@ Função `animate` aceita 3 parâmetros que essencialmente descrevem a animaçã
158
160
}
159
161
```
160
162
161
-
It's graph:
163
+
Seu gráfico:
162
164

163
165
164
166
Isso é igual a `transition-timing-function: linear`. Existem variantes mais interessantes mostradas abaixo.
@@ -192,9 +194,9 @@ animate({
192
194
return timeFraction
193
195
},
194
196
draw(progress) {
195
-
elem.style.width= progress *100+'%'
196
-
},
197
-
})
197
+
elem.style.width= progress *100+'%';
198
+
}
199
+
});
198
200
```
199
201
200
202
Ao contrário da animação CSS, podemos fazer qualquer função de tempo e qualquer função de desenho. A função de tempo não é limitada pelas curvas de Bezier. E `draw` pode ir além das propriedades, criar novos elements para animações como fogos de artifício ou algo do tipo.
@@ -227,7 +229,7 @@ Veja em ação (clique para ativar):
227
229
228
230
...Ou a curva cúbica ou evento maior que `n`. Aumentar a potência faz com que acelere mais rapidamente.
229
231
230
-
Aqui está o gráfico para `progress` na protência`5`:
232
+
Aqui está o gráfico para `progress` na potência`5`:
231
233
232
234

233
235
@@ -241,7 +243,7 @@ Função:
241
243
242
244
```js
243
245
functioncirc(timeFraction) {
244
-
return1-Math.sin(Math.acos(timeFraction))
246
+
return1-Math.sin(Math.acos(timeFraction));
245
247
}
246
248
```
247
249
@@ -299,10 +301,7 @@ Mais uma função "elástica" que aceita um parâmetro acidional `x` para o "int
0 commit comments