|
4 | 4 | let mainBird: HTMLDivElement; |
5 | 5 | let birdImg: HTMLImageElement; |
6 | 6 |
|
| 7 | + let angleX = $state(""); |
| 8 | + let angleY = $state(""); |
| 9 | + let scale = $state(""); |
| 10 | +
|
| 11 | + function updateTransform(transform: string) { |
| 12 | + birdImg.style.transform = transform; |
| 13 | + } |
| 14 | +
|
7 | 15 | function tilt(e: MouseEvent) { |
8 | 16 | const rect = mainBird.getBoundingClientRect(); |
9 | 17 | const x = e.clientX - rect.left; |
|
15 | 23 | const rotateY = ((x - centerX) / centerX) * 10; |
16 | 24 | const rotateX = ((y - centerY) / centerY) * -10; |
17 | 25 |
|
18 | | - birdImg.style.transform = `rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(1.10)`; |
| 26 | + angleX = `rotateX(${rotateX}deg)`; |
| 27 | + angleY = `rotateY(${rotateY}deg)`; |
| 28 | + scale = "scale(1.1)"; |
19 | 29 | } |
20 | 30 |
|
21 | 31 | function reset(e: MouseEvent) { |
22 | | - birdImg.style.transform = "rotateX(0) rotateY(0) scale(1)"; |
| 32 | + angleX = "rotateX(0)"; |
| 33 | + angleY = "rotateY(0)"; |
| 34 | + scale = "scale(1)"; |
23 | 35 | } |
24 | 36 |
|
25 | 37 | function press(e: MouseEvent) { |
26 | | - birdImg.style.transform = "scale(1)"; |
| 38 | + scale = "scale(0.9)"; |
27 | 39 | } |
28 | 40 |
|
29 | 41 | function release(e: MouseEvent) { |
30 | | - birdImg.style.transform = "scale(1.1)"; |
| 42 | + scale = "scale(1.1)"; |
31 | 43 | } |
32 | 44 |
|
33 | 45 | onMount(() => { |
|
43 | 55 | mainBird.removeEventListener("mousedown", press); |
44 | 56 | mainBird.removeEventListener("mouseup", release); |
45 | 57 | }); |
| 58 | +
|
| 59 | + $effect(() => { |
| 60 | + updateTransform(angleX + angleY + scale); |
| 61 | + }) |
46 | 62 | </script> |
47 | 63 |
|
48 | 64 | <div bind:this={mainBird} class="main-bird mt-50"> |
|
0 commit comments