From 282132ad937b9936ea938fa97a3aa979ab29521d Mon Sep 17 00:00:00 2001 From: Xingan Zhao <2081098605@qq.com> Date: Tue, 1 Oct 2024 23:11:54 +0800 Subject: [PATCH] feat:home animation --- src/containers/App/App.css | 134 +++++++++++++++++++++++++++++++++++-- src/contents/home.tsx | 45 +++++++------ 2 files changed, 150 insertions(+), 29 deletions(-) diff --git a/src/containers/App/App.css b/src/containers/App/App.css index 71a42d3..b99e3c3 100644 --- a/src/containers/App/App.css +++ b/src/containers/App/App.css @@ -1120,7 +1120,7 @@ span.formula_line::-webkit-scrollbar-track { } @keyframes element-1 { 0% { opacity: 0; } - 60% { opacity: 0; } + 40% { opacity: 0; } 70% { opacity: 1; } 100% { opacity: 1; } } @@ -1278,9 +1278,7 @@ span.formula_line::-webkit-scrollbar-track { opacity: 1; transition: transform 1s ease-out, opacity 1s ease-out; animation: element-7 1.5s linear ; - } - - @keyframes element-7 { + }@keyframes element-7 { 0% { scale: 0; } 50% { scale: 1.1; } 80% { scale: 1.2; } @@ -1293,6 +1291,24 @@ span.formula_line::-webkit-scrollbar-track { height: auto; width: 30vw; } + + .img-8 { + scale: 1; + transition: transform 1s ease-out, opacity 1s ease-out; + } + .img-8-active { + transform: translateX(0); + scale: 1; + opacity: 1; + transition: transform 1s ease-out, opacity 1s ease-out; + animation: element-8 0.8s linear infinite; + }@keyframes element-8 { + 0% { transform: rotate(0deg); } + 33% { transform: rotate(6deg); } + 67% { transform: rotate(-10deg); } + 100% { transform: rotate(0deg); } +} + .page-element-9 { position: absolute; left: 20vw; @@ -1307,6 +1323,20 @@ span.formula_line::-webkit-scrollbar-track { height: auto; width: 30vw; } + .img-10 { + transition: transform 1s ease-out, opacity 1s ease-out; + } + .img-10-active { + transform: translateX(0); + transition: transform 1s ease-out, opacity 1s ease-out; + animation: element-10 1s linear infinite; + }@keyframes element-10 { + 0% { transform: rotate(0deg) scale(1); } + 33% { transform: rotate(3deg) scale(1.1); } + 67% { transform: rotate(-3deg) scale(1);} + 100% { transform: rotate(0deg) scale(1); } +} + .page-element-11 { position: absolute; left: 22vw; @@ -1314,6 +1344,20 @@ span.formula_line::-webkit-scrollbar-track { height: auto; width: 50vw; } + .img-11 { + transition: transform 1s ease-out, opacity 1s ease-out; + } + .img-11-active { + transform: translateX(0); + transition: transform 1s ease-out, opacity 1s ease-out; + animation: element-11 1s linear infinite; + }@keyframes element-11 { + 0% { transform: translateX(0); } + 33% { transform: translateX(1vw); } + 67% { transform: translateX(-1vw);} + 100% { transform: translateX(0); } +} + .page-element-12 { position: absolute; left: 50vw; @@ -1361,11 +1405,27 @@ span.formula_line::-webkit-scrollbar-track { } .page-element-15 { position: absolute; - left: 35vw; + left: 30vw; top: 10vw; height: auto; width: 55vw; } + .img-15 { + transform-origin: center; + animation: rotate-head 7s linear infinite; + }@keyframes rotate-head { + 0% { + transform: rotate(0deg) scale(0.7); + } + 50% { + transform: rotate(180deg) scale(0.5); + } + 100% { + transform: rotate(360deg) scale(0.7); + } +} + + .page-element-15p { position: absolute; left: 13vw; @@ -1381,13 +1441,52 @@ span.formula_line::-webkit-scrollbar-track { height: auto; width: 20vw; } + .img-16 { + opacity: 0;; + } + .img-16-active { + transform: translateX(0); + transition: transform 1s ease-out, opacity 1s ease-out; + animation: element-16 1s linear; + }@keyframes element-16 { + 0% { + opacity: 0; + transform: translateY(0) ; } + 33% { + opacity: 1; + transform: translateY(1vw); } + 67% { + opacity: 1; + transform: translateY(-1vw);} + 100% { + opacity: 1; + transform: translateY(0); } +} + .page-element-16p { position: absolute; - left: 30vw; - top: 10vw; + left: -40vw; + top: 0vw; height: auto; width: 40vw; } + .img-16p { + opacity: 0; + } + .img-16p-active { + opacity: 1; + animation: element-16p 1s linear; + }@keyframes element-16p { + 0% { + opacity: 0; } + 33% { + opacity: 1; } + 67% { + opacity: 1;} + 100% { + opacity: 1;} +} + .page-element-17 { position: absolute; left: 3vw; @@ -1395,6 +1494,27 @@ span.formula_line::-webkit-scrollbar-track { height: auto; width: 80vw; } + + .img-17 { + opacity: 0; + } + .img-17-active { + opacity: 1; + animation: element-17 1s linear; + }@keyframes element-17 { + 0% { + opacity: 0; + transform: translateY(0) ; } + 33% { + opacity: 1; + transform: translateY(1vw); } + 67% { + opacity: 1; + transform: translateY(-1vw);} + 100% { + opacity: 1; + transform: translateY(0); } +} .page-element-18 { position: absolute; left: 75vw; diff --git a/src/contents/home.tsx b/src/contents/home.tsx index 2805fa9..965666e 100644 --- a/src/contents/home.tsx +++ b/src/contents/home.tsx @@ -7,7 +7,6 @@ export function Home() { const handleScroll = () => { const sections = document.querySelectorAll('.element'); let currentSection = ''; - console.log(sections) sections.forEach(section => { const sectionTop = section.getBoundingClientRect().top; if (sectionTop <= window.innerHeight / 2 && sectionTop > -section.clientHeight) { @@ -129,13 +128,13 @@ export function Home() { </div> {/* 5 */} <div className="page-container-5"> - <div className="page-element-8"> + <Element name="element-8" id="element-8" className="element page-element-8"> <img src="https://static.igem.wiki/teams/5378/home/nh3.webp" alt="example" - className="home-img-wide" + className={`home-img-wide ${activeLink === 'element-8' ? 'img-8-active' : 'img-8'}`} /> - </div> + </Element> <div className="page-element-9"> <img src="https://static.igem.wiki/teams/5378/home/path.webp" @@ -143,20 +142,20 @@ export function Home() { className="home-img-wide" /> </div> - <div className="page-element-10"> + <Element name="element-10" id="element-10" className="element page-element-10"> <img src="https://static.igem.wiki/teams/5378/home/hepacry.webp" alt="example" - className="home-img-wide" + className={`home-img-wide ${activeLink === 'element-10' ? 'img-10-active' : 'img-10'}`} /> - </div> - <div className="page-element-11"> + </Element> + <Element name="element-11" id="element-11" className="element page-element-11"> <img src="https://static.igem.wiki/teams/5378/home/gut.webp" alt="example" - className="home-img-wide" + className={`home-img-wide ${activeLink === 'element-11' ? 'img-11-active' : 'img-11'}`} /> - </div> + </Element> </div> {/* 6 */} @@ -182,13 +181,13 @@ export function Home() { className="home-img-wide" /> </div> - <div className="page-element-15"> + <Element name="element-15" id="element-15" className="element page-element-15"> <img src="https://static.igem.wiki/teams/5378/home/boyhead.webp" alt="example" - className="home-img-wide" + className={`home-img-wide ${activeLink === 'element-15' ? 'img-15' : 'img-15'}`} /> - </div> + </Element> <div className="page-element-15p"> <img src="https://static.igem.wiki/teams/5378/home/d3.webp" @@ -200,27 +199,29 @@ export function Home() { {/* 7 */} <div className="page-container-7"> - <div className="page-element-16"> + <Element name="element-16" id="element-16" className="element page-element-16"> <img src="https://static.igem.wiki/teams/5378/home/boybigmouth.webp" alt="example" - className="home-img-wide" + className={`home-img-wide ${activeLink === 'element-16' ? 'img-16-active' : 'img-16'}`} /> - </div> - <div className="page-element-16p"> + <div className="page-element-16p"> <img src="https://static.igem.wiki/teams/5378/home/words1.webp" alt="example" - className="home-img-wide" + className={`home-img-wide ${activeLink === 'element-16' ? 'img-16p-active' : 'img-16p'}`} /> - </div> - <div className="page-element-17"> + </div> + + </Element> + + <Element name="element-17" id="element-17" className="element page-element-17"> <img src="https://static.igem.wiki/teams/5378/home/girlfort.webp" alt="example" - className="home-img-wide" + className={`home-img-wide ${activeLink === 'element-17' ? 'img-17-active' : 'img-17'}`} /> - </div> + </Element> </div> {/* 8 */} <div className="page-container-8"> -- GitLab