├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
├── TODO
├── characters-and-backgrounds.zip
├── css
└── main.css
├── images
├── 1.svg
├── 2.svg
├── 3.svg
├── animation-software.jpg
├── bg.png
├── boat.png
├── clicking-cursor.svg
├── download-assets.png
├── instructions-1.svg
├── instructions-2.svg
├── instructions-3.svg
├── instructions-4.svg
├── instructions-5.svg
└── og.png
├── index.html
├── js
└── main.js
└── package.json
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | .DS_Store
3 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 David Miranda
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Animatize
2 |
3 | Drag a character with your mouse to create an animation
4 |
5 | 
6 |
7 | ## Demo
8 |
9 | Try the demo on [Animatize.com](https://animatize.com/)
10 |
11 | ## Remix your own animation!
12 |
13 | ### Two options:
14 |
15 | #### 1. Use [the demo](https://animatize.com/) to generate code for your own site
16 |
17 | You can generate an animation using your own images and then modify the code there
18 |
19 | #### 2. Fork this project
20 |
21 | I'd love to see a powerful animation tool that uses a user's natural motion as its foundation.
22 |
23 | Feel free to build your own animation service using the code here as proof-of-concept starting point.
24 |
25 | All the code can be found in `js/main.js`
26 |
27 | ## Animating with natural movement
28 |
29 | This idea has been a dream of mine for years. As a web developer, I've never learned After Effects or any other complex animation software.
30 |
31 | I've always dreamed of creating interactive demos and animations just by using my natural mouse movements.
32 |
33 | So, in early January 2022, [I took a few days off from my main project to create Animatize](https://twitter.com/panphora/status/1478805374455140353), a proof-of-concept showing off the idea that other people could try!
34 |
35 | ## License
36 |
37 | MIT License
38 |
--------------------------------------------------------------------------------
/TODO:
--------------------------------------------------------------------------------
1 | √ autoplay
2 | √ upload images as data urls
3 | √ make the generated code responsive
4 | √ add the design to the page
5 | √ implement generate code
6 | √ add generate code instructions with arrows
7 | √ implement start animation over
8 | √ clear generated code
9 | √ hide generated code
10 | √ erase history on user canvas element
11 | √ remove drag-started class
12 | √ reset character position
13 |
14 | implement "erase everything" button
15 | not really necessary since you can just upload new files anyways
16 |
17 | clear file inputs
18 | clear generated style element
19 | clear generated code
20 | erase history
21 | remove drag-started class
22 | reset character position
23 | add back hide-user-animations class
24 | set data-has-character & data-has-background to false
25 |
--------------------------------------------------------------------------------
/characters-and-backgrounds.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/panphora/animatize/224d881a9a87c287fb3a693951c95fdaa484f89a/characters-and-backgrounds.zip
--------------------------------------------------------------------------------
/css/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | padding: 1.5rem;
3 | line-height: 1.44;
4 | color: #212529;
5 | font-size: 21px;
6 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
7 | }
8 |
9 | .container {
10 | max-width: 532px;
11 | margin: 2.5rem auto;
12 | }
13 |
14 | .children-margin > * + * {
15 | margin-top: 2rem;
16 | }
17 |
18 | img {
19 | display: block;
20 | max-width: 100%;
21 | }
22 |
23 | h1, h2, h3, h4, h5, h6, p {
24 | margin: 0;
25 | }
26 |
27 | h1, h2, h3, h4, h5, h6 {
28 | font-size: 1rem;
29 | }
30 |
31 | .play {
32 | position: relative;
33 | margin-left: -1.5rem;
34 | margin-right: -1.5rem;
35 | padding: 2.5rem 1.5rem 2.5rem 1.5rem;
36 | border-top: 4px solid #D6336C;
37 | border-bottom: 4px solid #D6336C;
38 | background-color: #FFEAF6;
39 | }
40 |
41 | .play.blue {
42 | border-top: 4px solid #3B5BDB;
43 | border-bottom: 4px solid #3B5BDB;
44 | background-color: #DBE4FF;
45 | }
46 |
47 | .play-inner {
48 | max-width: 500px;
49 | margin: 0 auto;
50 | }
51 |
52 |
53 | .canvas {
54 | position: relative;
55 | left: 120px;
56 | max-width: 200px;
57 | }
58 |
59 | .canvas-inner {
60 | width: 100%;
61 | padding-top: 60%;
62 | background: url(../images/bg.png) top left / cover no-repeat;
63 | }
64 |
65 | .character-container {
66 | position: absolute;
67 | top: 0;
68 | left: 0;
69 | width: 100%;
70 | height: 100%;
71 | }
72 |
73 | .character {
74 | position: absolute;
75 | top: 42px;
76 | left: -60px;
77 | width: 18%;
78 | }
79 |
80 | .character-inner {
81 | width: 100%;
82 | padding-top: 100%;
83 | background: url(../images/boat.png) top left / cover no-repeat;
84 | }
85 |
86 | .canvas.full {
87 | overflow: hidden; /* to hide character when it's out of frame */
88 | left: 0;
89 | max-width: 100%;
90 | }
91 |
92 | .canvas.full .character {
93 | top: 0;
94 | left: 0;
95 | }
96 |
97 | .canvas.full.demo .canvas-inner span {
98 | position: absolute;
99 | display: block;
100 | width: 2.7%;
101 | height: 4.5%;
102 | background-color: #FB0000;
103 | border-radius: 50%;
104 | transform: scale(.8);
105 | }
106 |
107 | .canvas.full.demo .clicking-cursor {
108 | position: absolute;
109 | left: 19.5%;
110 | top: 16%;
111 | width: 5.4%;
112 | height: 9%;
113 | }
114 |
115 | .canvas.user {
116 | left: 151px;
117 | }
118 |
119 | .canvas.user .character {
120 | left: -120px;
121 | }
122 |
123 | .intro-header {
124 | position: relative;
125 | }
126 |
127 | .intro-header .clicking-cursor {
128 | position: absolute;
129 | right: -38px;
130 | bottom: -4px;
131 | }
132 |
133 | /* 123 */
134 |
135 | .instruction-123 {
136 | margin-bottom: 14rem;
137 | }
138 |
139 | .instruction-123 > div {
140 | display: flex;
141 | margin-bottom: 2.5rem;
142 | }
143 |
144 | .instruction-123-desc {
145 | margin-left: 1rem;
146 | }
147 |
148 | .instruction-123-desc > label {
149 | margin-bottom: .5rem;
150 | }
151 |
152 | .instruction-123-header {
153 | margin-bottom: .5rem;
154 | font-weight: bold;
155 | }
156 |
157 | .instruction-123-extra {
158 | font-size: 18px;
159 | font-weight: 600;
160 | opacity: .75;
161 | }
162 |
163 |
164 | /* instructions */
165 |
166 | .instructions {
167 | position: absolute;
168 | pointer-events: none;
169 | max-width: none;
170 | }
171 |
172 | .instructions-1 {
173 | top: -38px;
174 | left: -125px;
175 | width: 84px;
176 | }
177 |
178 | .instructions-2 {
179 | top: -70px;
180 | left: 100px;
181 | width: 94px;
182 | }
183 |
184 | .instructions-3 {
185 | bottom: -185px;
186 | left: -105px;
187 | width: 275px;
188 | }
189 |
190 | .instructions-4 {
191 | top: 26px;
192 | left: -70px;
193 | width: 58px;
194 | }
195 |
196 |
197 |
198 | .code {
199 | display: block;
200 | width: 100%;
201 | min-height: 240px;
202 | border: 4px solid #111;
203 | font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
204 | }
205 |
206 | body .crostini {
207 | background-color: #1F8535;
208 | }
209 |
210 | /* labels */
211 |
212 | .character-label, .canvas-label {
213 | position: absolute;
214 | top: 0;
215 | right: -6px;
216 | transform: translate(0, -120%);
217 | line-height: 1;
218 | font-size: 19px;
219 | font-weight: bold;
220 | }
221 |
222 | .canvas-label {
223 | right: auto;
224 | left: 0;
225 | transform: translate(0, -140%);
226 | }
227 |
228 | /* fix iOS Safari/Chrome bug with not being able to drag the character */
229 | .draggable {
230 | touch-action: none;
231 | }
232 |
233 | .drag-started .character-label, .drag-started .canvas-label, .drag-started .instructions-4 {
234 | display: none;
235 | }
236 |
237 | /* user animation */
238 |
239 | .hide-user-animations .canvas {
240 | display: none;
241 | }
242 |
243 | .hide-user-animations .reset-animation {
244 | display: none;
245 | }
246 |
247 |
248 | /* utils */
249 |
250 | .inline-block {
251 | display: inline-block;
252 | }
253 |
254 | .hide {
255 | display: none;
256 | }
257 |
258 | .h1 {
259 | font-size: 3rem;
260 | line-height: 1.15;
261 | }
262 |
263 | .h2 {
264 | font-size: 2.5rem;
265 | line-height: 1.2;
266 | }
267 |
268 | .h3 {
269 | font-size: 2rem;
270 | line-height: 1.25;
271 | }
272 |
273 | .text-center {
274 | text-align: center;
275 | }
276 |
277 | .normal {
278 | font-weight: 400;
279 | }
280 |
281 | .b {
282 | font-weight: bold;
283 | }
284 |
285 | .nm {
286 | margin-top: 0;
287 | }
288 |
289 | @media (min-width: 700px) {
290 | .wide, .play {
291 | margin-left: -3rem;
292 | margin-right: -3rem;
293 | }
294 | }
295 |
296 | @media (min-width: 700px) {
297 |
298 | .play {
299 | border: 3px solid #D6336C;
300 | border-radius: 5px;
301 | }
302 |
303 | .play.blue {
304 | border: 3px solid #3B5BDB;
305 | border-radius: 5px;
306 | }
307 | }
308 |
309 |
310 |
311 | /*
312 |
313 | CUSTOM BUTTON
314 |
315 | &
316 |
317 | CUSTOM FILE INPUT
318 |
319 |
320 |
321 |
322 | */
323 |
324 | .custom-file-input {
325 | width: 0.1px;
326 | height: 0.1px;
327 | opacity: 0;
328 | overflow: hidden;
329 | position: absolute;
330 | z-index: -1;
331 | }
332 |
333 | .button, .custom-file-input + label {
334 | box-sizing: border-box;
335 | flex: 0 0 auto;
336 | display: inline-block;
337 | padding: .68rem 1.3rem;
338 | background-color: #111;
339 | border: 1px solid transparent;
340 | border-radius: 9999px;
341 | color: #FFFFFF;
342 | cursor: pointer;
343 | font-size: 1.25rem;
344 | font-weight: 500;
345 | line-height: 1.44;
346 | text-align: center;
347 | text-decoration: none #6B7280 solid;
348 | text-decoration-thickness: auto;
349 | transition-duration: .2s;
350 | transition-property: background-color,border-color,color,fill,stroke;
351 | transition-timing-function: cubic-bezier(.4, 0, 0.2, 1);
352 | user-select: none;
353 | -webkit-user-select: none;
354 | touch-action: manipulation;
355 | width: auto;
356 | }
357 |
358 | .button.small, .custom-file-input.small + label {
359 | padding: .45rem 1.08rem;
360 | font-size: 1rem;
361 | }
362 |
363 | .button *, .custom-file-input + label * {
364 | pointer-events: none;
365 | }
366 |
367 | .button:hover, .custom-file-input:focus + label, .custom-file-input + label:hover {
368 | background-color: #262626;
369 | }
370 |
371 | .button:focus, .custom-file-input:focus + label, .custom-file-input.has-focus + label {
372 | box-shadow: none;
373 | outline: 2px solid transparent;
374 | outline-offset: 2px;
375 | }
376 |
377 |
378 |
379 | /* details & summary */
380 |
381 | details {
382 | box-sizing: border-box;
383 | border: 1px solid #000;
384 | border-radius: 4px;
385 | padding: .5em .5em 0;
386 | }
387 |
388 | details * {
389 | box-sizing: border-box;
390 | }
391 |
392 | summary {
393 | font-weight: bold;
394 | margin: -.5em -.5em 0;
395 | padding: .5em;
396 | cursor: pointer;
397 | }
398 |
399 | details[open] {
400 | padding: .5em;
401 | }
402 |
403 | details[open] summary {
404 | margin-bottom: .5em;
405 | }
406 |
407 |
408 |
409 | .download-assets {
410 | position: absolute;
411 | bottom: 16px;
412 | right: 36px;
413 | width: calc(158px * 1.18);
414 | height: calc(175px * 1.18);
415 | background: url(../images/download-assets.png) top left / cover no-repeat;
416 | }
417 |
418 | .download-assets:hover {
419 | opacity: .8;
420 | }
421 |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
429 |
430 |
431 |
432 |
433 |
434 |
435 |
--------------------------------------------------------------------------------
/images/1.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/images/2.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/images/3.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/images/animation-software.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/panphora/animatize/224d881a9a87c287fb3a693951c95fdaa484f89a/images/animation-software.jpg
--------------------------------------------------------------------------------
/images/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/panphora/animatize/224d881a9a87c287fb3a693951c95fdaa484f89a/images/bg.png
--------------------------------------------------------------------------------
/images/boat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/panphora/animatize/224d881a9a87c287fb3a693951c95fdaa484f89a/images/boat.png
--------------------------------------------------------------------------------
/images/clicking-cursor.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/images/download-assets.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/panphora/animatize/224d881a9a87c287fb3a693951c95fdaa484f89a/images/download-assets.png
--------------------------------------------------------------------------------
/images/instructions-1.svg:
--------------------------------------------------------------------------------
1 |
29 |
--------------------------------------------------------------------------------
/images/instructions-2.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/images/instructions-3.svg:
--------------------------------------------------------------------------------
1 |
47 |
--------------------------------------------------------------------------------
/images/instructions-4.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/images/instructions-5.svg:
--------------------------------------------------------------------------------
1 |
36 |
--------------------------------------------------------------------------------
/images/og.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/panphora/animatize/224d881a9a87c287fb3a693951c95fdaa484f89a/images/og.png
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Animatize - animations the easy way
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 | .user-character-image {background-image: url(data:image/png;base64,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)}
33 | .user-background-image {background-image: url(data:image/png;base64,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HAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5AgQAAAAAAMgRIAAAAAAAQI4AAQAAAAAAcgQIAAAAAACQI0AAAAAAAIAcAQIAAAAAAOQIEAAAAAAAIEeAAAAAAAAAOQIEAAAAAADIESAAAAAAAECOAAEAAAAAAHIECAAAAAAAkCNAAAAAAACAHAECAAAAAADkCBAAAAAAACBHgAAAAAAAADkCBAAAAAAAyBEgAAAAAABAjgABAAAAAAByBAgAAAAAAJAjQAAAAAAAgBwBAgAAAAAA5AgQAAAAAAAgR4AAAAAAAAA5B9xCOSnrzu6mAAAAAElFTkSuQmCC)}
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
Making animations the easy way
49 |
I’ve always dreamed of making animations, but the software is so complex...
50 |

51 |
52 |
What if you could make an animation...
53 |
...by dragging your mouse around?!
54 |
55 |
56 |
57 |
58 |

59 |
62 |
63 |
64 |
65 |
Welcome to
66 |
67 |
68 |
69 |
Make an animation by dragging a character around the screen
70 |
71 |
72 |
Try it out!
73 |
85 |
94 |
95 |
96 |
97 |
98 |
99 |
you can embed this animation
100 |
on your own website:
101 |
102 |
103 |
104 |
105 |
106 |
Copy and paste this code into your website where you want this animation to appear
107 |
It will load instantly and start playing!
108 |
109 |
110 |
111 |
112 |
Want to make one for your own website?
113 |
114 |
115 |
Make your own animation
116 |
117 |

118 |
Your canvas:
119 |
120 |
121 |
122 |
123 |
Your
character:
124 |
125 |
126 |
127 |
128 |
129 |
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 |
Add it to your own site!
172 |
Once you drag the character onto the canvas, the animation will start recording.
173 |
Once your finished, you can download the code and add it to your own site!
174 |
175 |
176 |
177 |
178 |
179 |
Copy and paste this code into your website where you want this animation to appear
180 |
It will load instantly and start playing!
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
--------------------------------------------------------------------------------
/js/main.js:
--------------------------------------------------------------------------------
1 | let characterElems = document.querySelectorAll(".character");
2 |
3 | let animationOutputElems = document.querySelectorAll(".canvas[data-input-from]");
4 | let animationInputElems = document.querySelectorAll(".canvas[data-output-to]");
5 | let animationOutputElemsCount = animationOutputElems.length;
6 |
7 | let demoAnimationHistory = JSON.parse('[[-17.951171875,58.42773437499999],[-17.751953125,58.42773437499999],[-17.646484375,58.42773437499999],[-17.30078125,58.42773437499999],[-17.12890625,58.42773437499999],[-16.826171875,58.42773437499999],[-16.623046875,58.42773437499999],[-16.521484375,58.42773437499999],[-16.28125,58.42773437499999],[-16.216796875,58.42773437499999],[-15.9140625,58.42773437499999],[-15.609375,58.42773437499999],[-15.353515625,58.212890625],[-15.3046875,58.170572916666664],[-14.7421875,58.170572916666664],[-14.482421875000002,58.170572916666664],[-14.328125,58.040364583333336],[-14.179687499999998,57.91341145833333],[-13.91015625,57.91341145833333],[-13.662109375,57.91341145833333],[-13.3828125,57.75716145833333],[-13.14453125,57.62369791666667],[-12.855468749999998,57.4609375],[-12.626953125000002,57.33072916666667],[-12.333984375,57.33072916666667],[-12.109375,57.33072916666667],[-11.806640625,57.161458333333336],[-11.591796875,57.041015625],[-11.2890625,56.871744791666664],[-11.07421875,56.751302083333336],[-10.591796875,56.54947916666667],[-10.302734375,56.42578124999999],[-9.951171875,56.227213541666664],[-9.78515625,56.13281249999999],[-9.439453125,55.93749999999999],[-9.267578125,55.83984374999999],[-9.048828125,55.654296875],[-8.962890625,55.579427083333336],[-8.5625,55.579427083333336],[-8.4453125,55.579427083333336],[-8.20703125,55.37760416666667],[-8.140625,55.31901041666667],[-7.718750000000001,55.31901041666667],[-7.623046875,55.31901041666667],[-7.337890625,55.078125],[-7.320312499999999,55.061848958333336],[-7.025390625,54.81445312499999],[-7.015625,54.80468750000001],[-6.501953125,54.518229166666664],[-6.343749999999999,54.384765625],[-6.193359375,54.2578125],[-5.673828125,53.968098958333336],[-5.251953125,53.78906249999999],[-4.90234375,53.64257812499999],[-4.609375,53.31380208333333],[-4.384765625,53.059895833333336],[-3.9355468749999996,52.87109375],[-3.61328125,52.734375],[-3.310546875,52.565104166666664],[-3.095703125,52.44466145833333],[-2.603515625,52.236328125],[-2.32421875,52.11914062500001],[-1.9921874999999998,51.93359374999999],[-1.806640625,51.829427083333336],[-1.462890625,51.637369791666664],[-1.2890625,51.539713541666664],[-0.93359375,51.341145833333336],[-0.771484375,51.24999999999999],[-0.390625,51.24999999999999],[-0.25390625,51.24999999999999],[-0.0234375,51.05468749999999],[0.05078125,50.989583333333336],[0.462890625,50.989583333333336],[0.568359375,50.989583333333336],[0.87109375,50.989583333333336],[1.125,50.77473958333333],[1.173828125,50.732421875],[1.640625,50.732421875],[1.69140625,50.732421875],[1.986328125,50.48502604166667],[2.146484375,50.475260416666664],[2.30078125,50.475260416666664],[2.4609375,50.33854166666667],[2.60546875,50.21484375000001],[2.76953125,50.21484375000001],[2.908203125,50.21484375000001],[3.1894531249999996,50.21484375000001],[3.42578125,50.21484375000001],[3.599609375,50.06835937500001],[3.7304687500000004,49.957682291666664],[3.912109375,49.957682291666664],[4.03515625,49.957682291666664],[4.224609375,49.957682291666664],[4.337890625,49.957682291666664],[4.53125,49.794921875],[4.642578125,49.700520833333336],[4.9765625,49.700520833333336],[5.16015625,49.700520833333336],[5.3671875,49.524739583333336],[5.46484375,49.440104166666664],[5.841796875,49.440104166666664],[5.982421875,49.440104166666664],[6.208984375,49.248046875],[6.287109375,49.1796875],[6.806640625,49.1796875],[7.029296875,48.99088541666667],[7.109375,48.922526041666664],[7.37109375,48.922526041666664],[7.412109375000001,48.922526041666664],[7.8671875,48.922526041666664],[7.9296875,48.922526041666664],[8.2109375,48.684895833333336],[8.232421875,48.66536458333333],[8.724609375,48.66536458333333],[8.75,48.66536458333333],[9.052734375,48.66536458333333],[9.2109375,48.66536458333333],[9.357421875,48.66536458333333],[9.662109375,48.66536458333333],[9.828125,48.525390625],[9.966796875,48.408203125],[10.140625,48.408203125],[10.271484375,48.408203125],[10.5703125,48.408203125],[10.7890625,48.408203125],[11.1015625,48.232421875],[11.306640625,48.115234375],[11.498046875,48.115234375],[11.611328125,48.115234375],[11.955078125,48.115234375],[12.12890625,48.115234375],[12.474609375,47.919921875],[12.646484375,47.822265625],[13.177734375,47.822265625],[13.41796875,47.822265625],[13.802734375,47.607421875],[13.935546874999998,47.532552083333336],[14.249999999999998,47.532552083333336],[14.433593750000002,47.532552083333336],[14.861328125,47.291666666666664],[14.951171875,47.239583333333336],[15.605468750000002,47.239583333333336],[15.72265625,47.239583333333336],[16.158203125,47.239583333333336],[16.240234375,47.239583333333336],[16.7578125,47.239583333333336],[17.263671875,47.239583333333336],[17.53515625,47.093098958333336],[17.794921875,46.946614583333336],[18.568359375,46.946614583333336],[18.826171875,46.946614583333336],[19.080078125,46.946614583333336],[19.373046875,46.946614583333336],[19.59765625,46.946614583333336],[19.888671875,46.946614583333336],[20.115234375,46.946614583333336],[20.421875,46.946614583333336],[20.6328125,46.946614583333336],[21.40625,46.946614583333336],[21.708984375,46.946614583333336],[21.923828125,46.946614583333336],[22.263671875,46.946614583333336],[22.44140625,46.946614583333336],[22.796875,46.946614583333336],[22.958984375,46.946614583333336],[23.333984375,46.946614583333336],[23.4765625,46.946614583333336],[23.986328125,46.946614583333336],[24.5625,46.946614583333336],[24.7578125,46.946614583333336],[25.179687499999996,46.946614583333336],[25.277343749999996,46.946614583333336],[25.919921875,46.946614583333336],[26.048828125,46.946614583333336],[26.72265625,46.946614583333336],[26.822265625000004,46.946614583333336],[27.314453125,46.946614583333336],[28.017578124999996,46.946614583333336],[28.107421875,46.946614583333336],[28.865234375,46.946614583333336],[29.150390625,46.946614583333336],[29.396484375,46.946614583333336],[30.169921875,46.946614583333336],[30.941406249999996,46.946614583333336],[31.232421875,46.946614583333336],[31.458984375,46.946614583333336],[31.912109374999996,46.946614583333336],[32.23046875,46.946614583333336],[32.541015625,46.946614583333336],[32.748046875,46.946614583333336],[33.07421875,47.125651041666664],[33.265625,47.229817708333336],[33.603515625,47.415364583333336],[33.783203125,47.513020833333336],[34.5546875,47.83203125],[34.927734375,47.83203125],[35.072265625,47.83203125],[35.30078125,48.020833333333336],[35.376953125,48.082682291666664],[35.77734375,48.304036458333336],[35.89453125,48.369140625],[36.314453125,48.60026041666667],[36.412109375,48.65234375],[36.666015625,48.65234375],[36.71484375,48.65234375],[37.17578125,48.90625],[37.232421875,48.935546875],[37.521484375,49.176432291666664],[37.7890625,49.329427083333336],[38.0546875,49.475911458333336],[38.208984375,49.602864583333336],[38.357421875,49.7265625],[38.623046875,49.873046875],[38.875,50.013020833333336],[39.1796875,50.013020833333336],[39.34375,50.14973958333333],[39.484375,50.266927083333336],[39.65625,50.41015625000001],[39.7890625,50.520833333333336],[39.97265625,50.673828125],[40.09375,50.77473958333333],[40.3984375,51.02864583333333],[40.58203125,51.02864583333333],[40.703125,51.02864583333333],[41.373046875,51.442057291666664],[41.521484375,51.56575520833333],[41.826171875,51.819661458333336],[42.205078125,51.819661458333336],[42.34375,51.819661458333336],[43.06640625,52.3046875],[43.412109375,52.565104166666664],[43.46875,52.610677083333336],[43.904296875,52.85156250000001],[44.447265625,53.151041666666664],[44.50390625,53.18033854166667],[44.796875,53.42447916666667],[45.064453125,53.57421875],[45.328125,53.720703125],[45.6328125,53.97460937500001],[45.912109375,54.127604166666664],[46.150390625,54.2578125],[46.4375,54.417317708333336],[46.66796875,54.54427083333333],[46.83984375,54.54427083333333],[46.97265625,54.54427083333333],[47.15234375,54.69401041666667],[47.27734375,54.798177083333336],[47.5859375,54.967447916666664],[47.794921875,55.08138020833333],[47.9921875,55.24414062500001],[48.099609375,55.33203125],[48.296875,55.494791666666664],[48.404296875,55.582682291666664],[48.609375,55.582682291666664],[48.70703125,55.582682291666664],[48.921875,55.76171875],[49.009765625,55.833333333333336],[49.40234375,56.05143229166667],[49.52734375,56.119791666666664],[49.767578125,56.31835937500001],[49.830078125,56.370442708333336],[50.072265625,56.370442708333336],[50.134765625,56.370442708333336],[50.400390625,56.591796875],[50.439453125,56.624348958333336],[50.95703124999999,56.907552083333336],[51.41015625000001,57.28190104166667],[51.56640625,57.412109375],[51.720703125,57.53906250000001],[51.87109375,57.66276041666667],[52.14257812500001,57.66276041666667],[52.388671875,57.66276041666667],[52.55664062499999,57.802734375],[52.69335937500001,57.91666666666667],[52.99804687500001,58.170572916666664],[53.517578125,58.45703125],[53.685546875,58.45703125],[53.818359375,58.45703125],[54.00390625,58.610026041666664],[54.123046875,58.707682291666664],[54.642578125,58.994140625],[54.947265625,59.24804687500001],[55.15820312500001,59.24804687500001],[55.251953125,59.24804687500001],[55.47265625,59.24804687500001],[55.556640625,59.24804687500001],[55.79296875000001,59.44335937500001],[55.861328125,59.498697916666664],[56.166015625,59.498697916666664],[56.396484375,59.690755208333336],[56.470703125,59.752604166666664],[56.923828125,59.752604166666664],[56.98828124999999,59.752604166666664],[57.24609375000001,59.752604166666664],[57.56640625,59.752604166666664],[57.595703125,59.752604166666664],[58.095703125,60.02929687500001],[58.267578125,60.03906249999999],[58.41796875000001,60.03906249999999],[58.72265625000001,60.29296875],[59.2421875,60.29296875],[59.412109375,60.29296875],[59.546875,60.29296875],[59.72460937500001,60.439453125],[59.849609375,60.54361979166667],[60.033203125,60.54361979166667],[60.15234375,60.54361979166667],[60.337890625,60.54361979166667],[60.45507812499999,60.54361979166667],[60.78125,60.54361979166667],[60.97265625,60.54361979166667],[61.177734375,60.71289062500001],[61.27734375,60.79427083333333],[61.48828125,60.79427083333333],[61.58007812500001,60.79427083333333],[61.673828125,60.79427083333333],[61.71093749999999,60.79427083333333],[61.9375,60.98307291666667],[62.015625,61.048177083333336],[62.251953125,61.048177083333336],[62.3203125,61.048177083333336],[62.57812499999999,61.048177083333336],[62.625,61.048177083333336],[62.892578125,61.048177083333336],[62.9296875,61.048177083333336],[63.20312500000001,61.048177083333336],[63.234375,61.048177083333336],[63.52734375,61.292317708333336],[63.5390625,61.302083333333336],[63.841796875,61.302083333333336],[64,61.42903645833333],[64.150390625,61.55273437499999],[64.41796875,61.55273437499999],[64.66796875,61.55273437499999],[64.830078125,61.55273437499999],[64.97265625,61.55273437499999],[65.1484375,61.55273437499999],[65.27734375,61.55273437499999],[65.794921875,61.839192708333336],[65.974609375,61.839192708333336],[66.09765625,61.839192708333336],[66.427734375,61.839192708333336],[66.615234375,61.839192708333336],[66.81640625,62.00520833333333],[66.919921875,62.08984374999999],[67.267578125,62.08984374999999],[67.4375,62.08984374999999],[67.7890625,62.08984374999999],[67.955078125,62.08984374999999],[68.341796875,62.08984374999999],[68.47265625,62.08984374999999],[68.876953125,62.314453125],[68.990234375,62.376302083333336],[69.228515625,62.376302083333336],[69.29296875,62.376302083333336],[69.724609375,62.376302083333336],[69.810546875,62.376302083333336],[70.24609375,62.376302083333336],[70.328125,62.376302083333336],[70.60546875,62.376302083333336],[70.630859375,62.376302083333336],[71.123046875,62.376302083333336],[71.1484375,62.376302083333336],[71.658203125,62.376302083333336],[72.0546875,62.376302083333336],[72.439453125,62.376302083333336],[72.958984375,62.376302083333336],[73.244140625,62.376302083333336],[73.4765625,62.376302083333336],[73.7578125,62.376302083333336],[73.9921875,62.376302083333336],[74.2890625,62.376302083333336],[74.509765625,62.376302083333336],[74.693359375,62.376302083333336],[74.8125,62.376302083333336],[75.130859375,62.376302083333336],[75.330078125,62.376302083333336],[75.529296875,62.376302083333336],[75.634765625,62.376302083333336],[75.841796875,62.376302083333336],[75.939453125,62.376302083333336],[76.1484375,62.376302083333336],[76.244140625,62.376302083333336],[76.46875,62.376302083333336],[76.546875,62.376302083333336],[76.7734375,62.376302083333336],[76.8515625,62.376302083333336],[77.091796875,62.174479166666664],[77.15625,62.119140625],[77.412109375,62.119140625],[77.4609375,62.119140625],[77.732421875,61.891276041666664],[77.763671875,61.86197916666667],[78.04296875,61.86197916666667],[78.068359375,61.86197916666667],[78.359375,61.61783854166667],[78.5234375,61.604817708333336],[78.677734375,61.604817708333336],[78.8359375,61.47135416666667],[78.98046875,61.34765625000001],[79.14453125,61.34765625000001],[79.28515625,61.34765625000001],[79.453125,61.204427083333336],[79.587890625,61.09049479166667],[79.75,61.09049479166667],[79.888671875,61.09049479166667],[80.0625,60.94401041666667],[80.193359375,60.83333333333333],[80.37890625,60.83333333333333],[80.498046875,60.83333333333333],[80.828125,60.64778645833333],[81.015625,60.54036458333333],[81.21484375,60.54036458333333],[81.318359375,60.54036458333333],[81.525390625,60.364583333333336],[81.623046875,60.279947916666664],[81.84375,60.279947916666664],[81.927734375,60.279947916666664],[82.158203125,60.084635416666664],[82.23046875,60.022786458333336],[82.470703125,60.022786458333336],[82.53515625,60.022786458333336],[82.76171875,59.830729166666664],[82.837890625,59.765625],[83.08984375,59.554036458333336],[83.142578125,59.508463541666664],[83.59375,59.508463541666664],[83.93359375,59.27734375],[83.962890625,59.251302083333336],[84.44921875,59.251302083333336],[84.482421875,59.251302083333336],[84.787109375,58.994140625],[85.302734375,58.704427083333336],[85.580078125,58.54817708333333],[85.82421875,58.411458333333336],[85.9921875,58.268229166666664],[86.12890625,58.15104166666667],[86.423828125,58.15104166666667],[86.646484375,58.15104166666667],[87.1640625,57.861328125],[87.474609375,57.68554687500001],[87.681640625,57.568359375],[87.869140625,57.408854166666664],[87.984375,57.311197916666664],[88.330078125,57.115885416666664],[88.501953125,57.018229166666664],[88.849609375,56.822916666666664],[89.01953125,56.725260416666664],[89.236328125,56.54296875],[89.32421875,56.468098958333336],[89.697265625,56.468098958333336],[89.841796875,56.468098958333336],[90.080078125,56.266276041666664],[90.14453125,56.2109375],[90.390625,56.00260416666667],[90.44921875,55.95052083333333],[90.708984375,55.73242187500001],[90.75390625,55.69335937499999],[90.87109375,55.69335937499999],[90.884765625,55.69335937499999],[91.1640625,55.458984375],[91.3359375,55.3125],[91.49609375,55.17578125],[91.65234375,55.17578125],[91.80078125,55.17578125],[92.072265625,55.02278645833333],[92.318359375,54.8828125],[92.48046875,54.74609375],[92.623046875,54.625651041666664],[93.142578125,54.3359375],[93.302734375,54.19921875],[93.4453125,54.078776041666664],[93.623046875,53.929036458333336],[93.75,53.821614583333336],[94.26953125,53.531901041666664],[94.44140625,53.385416666666664],[94.572265625,53.27473958333333],[94.91015625,53.0859375],[95.08984375,52.98502604166667],[95.298828125,52.809244791666664],[95.39453125,52.72786458333333],[95.9140625,52.43815104166667],[96.14453125,52.24283854166667],[96.21875,52.17773437499999],[96.62109375,52.17773437499999],[96.736328125,52.17773437499999],[97.146484375,51.94661458333333],[97.25390625,51.88476562499999],[97.6875,51.64062499999999],[97.771484375,51.59179687499999],[98.244140625,51.328125],[98.291015625,51.29882812499999],[98.767578125,51.03190104166667],[99.287109375,51.00585937499999],[99.326171875,51.00585937499999],[99.814453125,50.732421875]]');
8 |
9 | // file inputs
10 | let backgroundImageInputElem = document.querySelector("[name='background-image']");
11 | let characterImageInputElem = document.querySelector("[name='character-image']");
12 |
13 | let demoDotsHTML = '';
14 | let demoCanvasInner = document.querySelector(".canvas.full.demo .canvas-inner");
15 | demoCanvasInner.insertAdjacentHTML("afterbegin", demoDotsHTML);
16 |
17 | // // for generating demo dots:
18 | // let demoDotsHTML = "";
19 | // demoAnimationHistory.forEach((coord, index) => {
20 | // if (index % 7 === 0) {
21 | // demoDotsHTML += ``;
22 | // }
23 | // });
24 | // demoCanvasInner.insertAdjacentHTML("afterbegin", demoDotsHTML);
25 | // document.addEventListener("click", (e) => e.target.remove());
26 |
27 | function init () {
28 | animationOutputElems.forEach(el => {
29 | let animationInputElemSelector = `[data-output-to="${el.getAttribute("data-input-from")}"]`;
30 | el.animationInputElem = document.querySelector(animationInputElemSelector);
31 | el.isAnimationOutputElem = true;
32 | el.characterContainerElem = el.querySelector(".character-container");
33 | el.backgroundElem = el.querySelector(".canvas-inner");
34 | el.characterElem = el.querySelector(".character-inner");
35 |
36 | el.animationHistory = [];
37 | el.animationIndex = 0;
38 | });
39 |
40 | animationInputElems.forEach(el => {
41 | let animationOutputElemSelector = `[data-input-from="${el.getAttribute("data-output-to")}"]`;
42 | el.animationOutputElem = document.querySelector(animationOutputElemSelector);
43 | el.isAnimationInputElem = true;
44 | });
45 |
46 | characterElems.forEach(el => {
47 | el.animationContainerElem = el.closest(".canvas");
48 | el.animationContainerElem.characterElem = el;
49 |
50 | if (el.animationContainerElem.isAnimationInputElem) {
51 | el.animationOutputElem = el.animationContainerElem.animationOutputElem;
52 | } else {
53 | el.animationInputElem = el.animationContainerElem.animationInputElem;
54 | }
55 |
56 | el.backgroundElem = el.animationContainerElem.querySelector(".canvas-inner");
57 | el.positionX = 0;
58 | el.positionY = 0;
59 | el.throttleMovementIndex = 0;
60 | });
61 |
62 | let demoAnimationOutputElem = document.querySelector('[data-input-from="demo"]');
63 | demoAnimationOutputElem.animationHistory = demoAnimationHistory;
64 | }
65 |
66 | init();
67 |
68 |
69 | interact('.draggable').draggable({
70 | listeners: {
71 | start (event) {
72 | let playElem = event.target.closest(".play");
73 | if (playElem) {
74 | playElem.classList.add("drag-started");
75 | }
76 | },
77 | move (event) {
78 | let characterElem = event.currentTarget;
79 | let backgroundElem = characterElem.backgroundElem;
80 |
81 | characterElem.positionX += event.dx;
82 | characterElem.positionY += event.dy;
83 |
84 | characterElem.style.transform = `translate(${characterElem.positionX}px, ${characterElem.positionY}px)`;
85 |
86 |
87 | let characterRect = interact.getElementRect(characterElem);
88 | let backgroundRect = interact.getElementRect(backgroundElem);
89 |
90 | if (doesCollide(characterRect, backgroundRect)) {
91 | // don't record every movement to save space
92 | let throttleMovementIndex = characterElem.throttleMovementIndex;
93 |
94 | if (throttleMovementIndex % 2 === 0) {
95 | // make character movement relative to background
96 | let leftPercentage = ((characterRect.left - backgroundRect.left) / backgroundRect.width) * 100;
97 | let topPercentage = ((characterRect.top - backgroundRect.top) / backgroundRect.height) * 100;
98 | characterElem.animationOutputElem.animationHistory.push([leftPercentage, topPercentage]);
99 | }
100 |
101 | throttleMovementIndex++;
102 | }
103 | },
104 | }
105 | })
106 |
107 |
108 |
109 |
110 |
111 | function gameLoop() {
112 |
113 | // loop through the animation output elements
114 | for (let i = 0; i < animationOutputElemsCount; i++) {
115 | let animationOutputElem = animationOutputElems[i];
116 |
117 | if (animationOutputElem.animationHistory.length !== 0) {
118 | if (animationOutputElem.animationIndex === animationOutputElem.animationHistory.length) {
119 | animationOutputElem.animationIndex = 0;
120 | }
121 |
122 | let currentTranslation = animationOutputElem.animationHistory[animationOutputElem.animationIndex];
123 | animationOutputElem.characterElem.classList.remove("hide");
124 |
125 | animationOutputElem.characterContainerElem.style.transform = `translate(${currentTranslation[0]}%, ${currentTranslation[1]}%)`;
126 | animationOutputElem.animationIndex++;
127 | }
128 |
129 | }
130 |
131 | window.requestAnimationFrame(gameLoop);
132 | }
133 |
134 | gameLoop();
135 |
136 |
137 | let userAnimationPlayContainer = document.querySelector('[data-has-character][data-has-background]');
138 | let characterBackgroundImageStylesheet = document.querySelector("#character-background-image");
139 | let backgroundBackgroundImageStylesheet = document.querySelector("#background-background-image");
140 | let characterBackgroundImageElem = document.querySelector(".user-character-image");
141 | let backgroundBackgroundImageElem = document.querySelector(".user-background-image");
142 | let customFileInputs = document.querySelectorAll(".custom-file-input");
143 | customFileInputs.forEach((customFileInput) => {
144 | customFileInput.addEventListener("change", (event) => {
145 | let file = customFileInput.files[0];
146 |
147 | if ( /\.(jpe?g|png|gif)$/i.test(file.name) ) {
148 | let reader = new FileReader();
149 |
150 | reader.addEventListener("load", function () {
151 | customFileInput.nextElementSibling.innerText = file.name;
152 |
153 | if (customFileInput.id === "backgroundImage") {
154 | backgroundBackgroundImageStylesheet.innerHTML = ".user-background-image {background-image: url(" + reader.result + ") !important;}";
155 | userAnimationPlayContainer.setAttribute("data-has-background", "true");
156 | }
157 |
158 | if (customFileInput.id === "characterImage") {
159 | characterBackgroundImageStylesheet.innerHTML = ".user-character-image {background-image: url(" + reader.result + ") !important;}";
160 | userAnimationPlayContainer.setAttribute("data-has-character", "true");
161 | }
162 |
163 | if (userAnimationPlayContainer.getAttribute("data-has-background") === "true" && userAnimationPlayContainer.getAttribute("data-has-character") === "true") {
164 | userAnimationPlayContainer.classList.remove("hide-user-animations");
165 | }
166 | }, false);
167 |
168 | reader.readAsDataURL(file);
169 | }
170 | });
171 | });
172 |
173 |
174 | // UTILS
175 |
176 | function doesCollide (elemPos1, elemPos2) {
177 | return elemPos1.left < elemPos2.left + elemPos2.width
178 | && elemPos1.left + elemPos1.width > elemPos2.left
179 | && elemPos1.top < elemPos2.top + elemPos2.height
180 | && elemPos1.height + elemPos1.top > elemPos2.top;
181 | }
182 |
183 |
184 | // clipboard
185 |
186 | let clipboard = new ClipboardJS('.copy-code');
187 | clipboard.on('success', function () {
188 | crostini("Code successfully copied!");
189 | });
190 |
191 |
192 |
193 | // FIXES
194 |
195 | // fix firefox bug, see: https://tympanus.net/codrops/2015/09/15/styling-customizing-file-inputs-smart-way/
196 | document.querySelectorAll(".custom-file-input").forEach(inputElem => {
197 | inputElem.addEventListener("focus", () => { inputElem.classList.add("has-focus") });
198 | inputElem.addEventListener("blur", () => { inputElem.classList.remove("has-focus") });
199 | });
200 |
201 |
202 |
203 | let baseCSS = `
204 | .canvas {
205 | position: relative;
206 | left: 120px;
207 | max-width: 200px;
208 | }
209 |
210 | .canvas-inner {
211 | width: 100%;
212 | padding-top: 60%;
213 | background-position: top left;
214 | background-size: cover;
215 | background-repeat: no-repeat;
216 | }
217 |
218 | .character-container {
219 | position: absolute;
220 | top: 0;
221 | left: 0;
222 | width: 100%;
223 | height: 100%;
224 | }
225 |
226 | .character {
227 | position: absolute;
228 | top: 42px;
229 | left: -60px;
230 | width: 18%;
231 | }
232 |
233 | .character-inner {
234 | width: 100%;
235 | padding-top: 100%;
236 | background-position: top left;
237 | background-size: cover;
238 | background-repeat: no-repeat;
239 | }
240 |
241 | .canvas.full {
242 | overflow: hidden; /* to hide character when it's out of frame */
243 | left: 0;
244 | max-width: 100%;
245 | }
246 |
247 | .canvas.full .character {
248 | top: 0;
249 | left: 0;
250 | }`;
251 |
252 | let baseHTML = `
253 |
262 | `;
263 |
264 | function generateCode (sourceElem, isDemo) {
265 | let animationHistory = sourceElem.animationHistory;
266 |
267 | if (!isDemo && backgroundBackgroundImageStylesheet.innerHTML.length === 0) {
268 | crostini("Upload a background first!" , {type: "error"});
269 | return;
270 | }
271 |
272 | if (!isDemo && characterBackgroundImageStylesheet.innerHTML.length === 0) {
273 | crostini("Upload a character first!" , {type: "error"});
274 | return;
275 | }
276 |
277 | if (animationHistory.length === 0) {
278 | crostini("Drag character to animate first" , {type: "error"});
279 | return;
280 | }
281 |
282 | let combinedCSS;
283 | if (!isDemo) {
284 | combinedCSS = "";
285 | } else {
286 | let demoBackgroundImageStylesheet = document.querySelector("#demo-background-images");
287 | combinedCSS = "";
288 | }
289 |
290 | let baseJS = `
291 |
314 | `;
315 |
316 | let outputtedCode = combinedCSS + baseHTML + baseJS;
317 | return outputtedCode;
318 | }
319 |
320 |
321 | document.querySelectorAll(".generate-code").forEach(generateCodeElem => {
322 | generateCodeElem.addEventListener("click", (event) => {
323 | let codePlaygroundElem = event.target.closest(".code-playground");
324 | let codeContainer = codePlaygroundElem.querySelector(".code-container");
325 |
326 | let sourceElemSelector = event.currentTarget.getAttribute("data-animation-history-elem-selector");
327 | let sourceElem = document.querySelector(sourceElemSelector);
328 | let isDemo = event.currentTarget.getAttribute("data-is-demo") === "true";
329 |
330 | let generatedCode = generateCode(sourceElem, isDemo);
331 |
332 | if (generatedCode) {
333 | codeContainer.querySelector(".code").value = generatedCode;
334 | codeContainer.classList.remove("hide");
335 | }
336 | });
337 | });
338 |
339 |
340 | document.querySelectorAll(".reset-animation").forEach(resetAnimationElem => {
341 | resetAnimationElem.addEventListener("click", (event) => {
342 | let playElem = event.target.closest(".play");
343 | let _userAnimationOutputElem = playElem.querySelector("[data-input-from]");
344 | let _userAnimationInputElem = playElem.querySelector("[data-output-to]");
345 | let outputCharacterElem = _userAnimationOutputElem.querySelector(".character");
346 | let inputCharacterElem = _userAnimationInputElem.querySelector(".character");
347 | let codePlaygroundSelector = event.currentTarget.getAttribute("data-code-playground-selector");
348 | let codePlaygroundElem = document.querySelector(codePlaygroundSelector);
349 | let codeContainer = codePlaygroundElem.querySelector(".code-container");
350 |
351 | // clear generated code
352 | codeContainer.querySelector(".code").value = "";
353 | // hide generated code
354 | codeContainer.classList.add("hide");
355 | // erase history on user canvas element
356 | _userAnimationOutputElem.animationHistory = [];
357 | // remove drag-started class
358 | playElem.classList.remove("drag-started");
359 | // reset animation index
360 | _userAnimationOutputElem.animationIndex = 0;
361 | // hide output character
362 | outputCharacterElem.classList.add("hide");
363 | // reset input character position
364 | inputCharacterElem.style.transform = `translate(0px, 0px)`;
365 | // reset relative position data on character elem
366 | inputCharacterElem.positionX = 0;
367 | inputCharacterElem.positionY = 0;
368 | // success message!
369 | crostini("Animation successfully reset");
370 | });
371 | });
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "motion-comic-builder",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "author": "",
10 | "license": "MIT"
11 | }
12 |
--------------------------------------------------------------------------------