From f13d7f554de6ef2bb7707b22a582d96d8c4605ff Mon Sep 17 00:00:00 2001 From: yeonseong Date: Sun, 26 Nov 2023 14:58:57 +0900 Subject: [PATCH 1/6] build: add animated lib --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 62c8352c..79ff65d6 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "private": true, "dependencies": { "@ladle/react": "^2.13.0", + "@react-spring/web": "^9.7.3", "@sentry/react": "^7.53.0", "@sentry/tracing": "^7.53.0", "@testing-library/jest-dom": "^5.16.5", From 2efc2885c2733fd825b317f9279e673a350dab4b Mon Sep 17 00:00:00 2001 From: yeonseong Date: Sun, 26 Nov 2023 15:43:37 +0900 Subject: [PATCH 2/6] chore: add paw.png --- public/paw.png | Bin 0 -> 4088 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/paw.png diff --git a/public/paw.png b/public/paw.png new file mode 100644 index 0000000000000000000000000000000000000000..09d6d90fb025b1cb314fac336488e0fce2f399b9 GIT binary patch literal 4088 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 q;>!Vs?MS&q{ka#V{TBj~)BX=E%1 Date: Sun, 26 Nov 2023 15:43:51 +0900 Subject: [PATCH 3/6] wip: error cat not yet implemented --- src/asset/css/NotFound.css | 10 +++++++ src/component/utils/NotFound.jsx | 51 ++++++++++++++++++++++++++++++-- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/src/asset/css/NotFound.css b/src/asset/css/NotFound.css index bab8d65d..dbfd7c85 100644 --- a/src/asset/css/NotFound.css +++ b/src/asset/css/NotFound.css @@ -6,3 +6,13 @@ background-color: #2d2d2d; padding: 25rem 0 10rem 0; } + +#error_cat { + width: 100vh; + height: 100vh; + position: absolute; + z-index: 1; + object-fit: cover; + object-position: center; + background: red; +} \ No newline at end of file diff --git a/src/component/utils/NotFound.jsx b/src/component/utils/NotFound.jsx index 195c97c8..292063b3 100644 --- a/src/component/utils/NotFound.jsx +++ b/src/component/utils/NotFound.jsx @@ -1,13 +1,58 @@ +import { useSpring, animated } from '@react-spring/web'; import "../../asset/css/NotFound.css"; - const NotFound = () => { + const [springs, api] = useSpring(() => ({ + from: { opacity: 0, transform: 'translate3d(0px, 0px, 0px)' }, + config: { duration: 500 } // 애니메이션 지속 시간 설정 + })); + + const froms = [ + { x: 0, y: 0 }, + { x: window.innerWidth, y: 0 }, + { x: 0, y: window.innerHeight }, + { x: window.innerWidth, y: window.innerHeight }, + ]; + + const getRandomFromIndex = (from, to) => { + const min = Math.ceil(from); + const max = Math.floor(to); + return Math.floor(Math.random() * (max - min)) + min; + } + + const handleClick = (event) => { + api.start({ + to: { + opacity: 1, // 불투명도를 1로 설정 + transform: `translate3d(${event.clientX}px, ${event.clientY}px, 0px)` // 위치 업데이트 + }, + // 애니메이션 시작시 불투명도를 0으로 설정 및 위치 설정 froms 배열에서 랜덤으로 from 선택되도록 수정 + from: { + opacity: 0, + transform: `translate3d(${froms[getRandomFromIndex(0, froms.length)].x}px, ${froms[getRandomFromIndex(0, froms.length)].y}px, 0px)` + }, + reset: true // 매 클릭마다 애니메이션 리셋 + }); + }; + return ( -
+ <> +
+ +
404
Not Found
-
+ ); }; From 147bb186d22547df56d4ec4346a9441f5dc40a1b Mon Sep 17 00:00:00 2001 From: yeonseong Date: Mon, 27 Nov 2023 16:54:33 +0900 Subject: [PATCH 4/6] feat: cat paw in NotFound component --- src/component/utils/NotFound.jsx | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/component/utils/NotFound.jsx b/src/component/utils/NotFound.jsx index 292063b3..085801c8 100644 --- a/src/component/utils/NotFound.jsx +++ b/src/component/utils/NotFound.jsx @@ -37,13 +37,9 @@ const NotFound = () => { return ( <>
- From f8b1ba16c3e7ceb623885191a197c6a32f98ef2d Mon Sep 17 00:00:00 2001 From: yeonseong Date: Mon, 27 Nov 2023 16:54:43 +0900 Subject: [PATCH 5/6] feat: error_cat css --- src/asset/css/NotFound.css | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/asset/css/NotFound.css b/src/asset/css/NotFound.css index dbfd7c85..3bd5a5eb 100644 --- a/src/asset/css/NotFound.css +++ b/src/asset/css/NotFound.css @@ -8,11 +8,21 @@ } #error_cat { - width: 100vh; + width: 100vw; height: 100vh; position: absolute; z-index: 1; object-fit: cover; object-position: center; - background: red; +} + +#error_cat__paw { + width: 12vw; + height: 12vw; + position: absolute; + z-index: 2; + object-fit: cover; + object-position: center; + background: url("paw.png") no-repeat; + background-size: 100% 100%; } \ No newline at end of file From 6b3b9794b9c77434721abdafbccb4aa02a359a2d Mon Sep 17 00:00:00 2001 From: chan Date: Mon, 27 Nov 2023 17:35:19 +0900 Subject: [PATCH 6/6] fix: change png -> svg --- pnpm-lock.yaml | 51 +++++++++++++++++++++++++++++++++++++ public/paw.png | Bin 4088 -> 0 bytes src/asset/css/NotFound.css | 2 +- src/asset/img/paw.svg | 16 ++++++++++++ 4 files changed, 68 insertions(+), 1 deletion(-) delete mode 100644 public/paw.png create mode 100644 src/asset/img/paw.svg diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0c55ed7e..c137ace3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ dependencies: '@ladle/react': specifier: ^2.13.0 version: 2.13.0(react-dom@18.2.0)(react@18.2.0) + '@react-spring/web': + specifier: ^9.7.3 + version: 9.7.3(react-dom@18.2.0)(react@18.2.0) '@sentry/react': specifier: ^7.53.0 version: 7.53.0(react@18.2.0) @@ -765,6 +768,54 @@ packages: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 + /@react-spring/animated@9.7.3(react@18.2.0): + resolution: {integrity: sha512-5CWeNJt9pNgyvuSzQH+uy2pvTg8Y4/OisoscZIR8/ZNLIOI+CatFBhGZpDGTF/OzdNFsAoGk3wiUYTwoJ0YIvw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@react-spring/shared': 9.7.3(react@18.2.0) + '@react-spring/types': 9.7.3 + react: 18.2.0 + dev: false + + /@react-spring/core@9.7.3(react@18.2.0): + resolution: {integrity: sha512-IqFdPVf3ZOC1Cx7+M0cXf4odNLxDC+n7IN3MDcVCTIOSBfqEcBebSv+vlY5AhM0zw05PDbjKrNmBpzv/AqpjnQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@react-spring/animated': 9.7.3(react@18.2.0) + '@react-spring/shared': 9.7.3(react@18.2.0) + '@react-spring/types': 9.7.3 + react: 18.2.0 + dev: false + + /@react-spring/shared@9.7.3(react@18.2.0): + resolution: {integrity: sha512-NEopD+9S5xYyQ0pGtioacLhL2luflh6HACSSDUZOwLHoxA5eku1UPuqcJqjwSD6luKjjLfiLOspxo43FUHKKSA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@react-spring/types': 9.7.3 + react: 18.2.0 + dev: false + + /@react-spring/types@9.7.3: + resolution: {integrity: sha512-Kpx/fQ/ZFX31OtlqVEFfgaD1ACzul4NksrvIgYfIFq9JpDHFwQkMVZ10tbo0FU/grje4rcL4EIrjekl3kYwgWw==} + dev: false + + /@react-spring/web@9.7.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-BXt6BpS9aJL/QdVqEIX9YoUy8CE6TJrU0mNCqSoxdXlIeNcEBWOfIyE6B14ENNsyQKS3wOWkiJfco0tCr/9tUg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@react-spring/animated': 9.7.3(react@18.2.0) + '@react-spring/core': 9.7.3(react@18.2.0) + '@react-spring/shared': 9.7.3(react@18.2.0) + '@react-spring/types': 9.7.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@remix-run/router@1.6.2: resolution: {integrity: sha512-LzqpSrMK/3JBAVBI9u3NWtOhWNw5AMQfrUFYB0+bDHTSw17z++WJLsPsxAuK+oSddsxk4d7F/JcdDPM1M5YAhA==} engines: {node: '>=14'} diff --git a/public/paw.png b/public/paw.png deleted file mode 100644 index 09d6d90fb025b1cb314fac336488e0fce2f399b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4088 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 q;>!Vs?MS&q{ka#V{TBj~)BX=E%1 + + + + + + + + + + + + + + + \ No newline at end of file