BLOG-7 feat: motto section and with animation
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Frontend CI / build (push) Successful in 1m21s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Frontend CI / build (push) Successful in 1m21s
				
			This commit is contained in:
		
							parent
							
								
									741d92ff15
								
							
						
					
					
						commit
						5517766f3f
					
				| @ -1,17 +1,13 @@ | ||||
| import SelfTags from "@/lib/home/framework/ui/SelfTags"; | ||||
| import AboutMe from "@/lib/home/framework/ui/AboutMe"; | ||||
| import FirstView from "@/lib/home/framework/ui/FirstView"; | ||||
| import Motto from "@/lib/home/framework/ui/Motto"; | ||||
| 
 | ||||
| export default function HomePage() { | ||||
|   return ( | ||||
|     <div className="mx-auto flex min-h-[--content-height] max-w-screen-xl flex-col justify-center gap-y-2.5 px-4 md:gap-y-8 md:px-6"> | ||||
|       <h2 className="text-3xl font-bold text-gray-800 md:text-6xl">Hello 大家好!</h2> | ||||
|       <h1 className="flex flex-row items-center gap-x-2 text-4xl font-extrabold text-gray-800 md:text-7xl"> | ||||
|         <span>我是</span> | ||||
|         <div className="rounded-lg bg-blue-600 px-1.5 py-1"> | ||||
|           <span className="text-white">Squid</span> | ||||
|         </div> | ||||
|         <span>魷魚</span> | ||||
|       </h1> | ||||
|       <SelfTags /> | ||||
|     <div> | ||||
|       <FirstView /> | ||||
|       <AboutMe /> | ||||
|       <Motto /> | ||||
|     </div> | ||||
|   ); | ||||
| } | ||||
|  | ||||
							
								
								
									
										3
									
								
								frontend/src/lib/home/framework/ui/AboutMe.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								frontend/src/lib/home/framework/ui/AboutMe.tsx
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| export default function AboutMe() { | ||||
|   return <></>; | ||||
| } | ||||
							
								
								
									
										40
									
								
								frontend/src/lib/home/framework/ui/AnimatedMark.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								frontend/src/lib/home/framework/ui/AnimatedMark.tsx
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,40 @@ | ||||
| "use client"; | ||||
| 
 | ||||
| import { useEffect, useRef, useState } from "react"; | ||||
| 
 | ||||
| export default function AnimatedMark(props: { text: string; direction: "left" | "right" }) { | ||||
|   const [isVisible, setIsVisible] = useState(false); | ||||
| 
 | ||||
|   const element = useRef<HTMLSpanElement | null>(null); | ||||
| 
 | ||||
|   const origin = props.direction === "left" ? "origin-left" : "origin-right"; | ||||
| 
 | ||||
|   useEffect(() => { | ||||
|     if (!element.current) { | ||||
|       return; | ||||
|     } | ||||
| 
 | ||||
|     const observer = new IntersectionObserver( | ||||
|       (entries) => { | ||||
|         entries.forEach((entry) => { | ||||
|           if (entry.isIntersecting) { | ||||
|             setIsVisible(true); | ||||
|             console.log(element.current); | ||||
|             observer.disconnect(); | ||||
|           } | ||||
|         }); | ||||
|       }, | ||||
|       { threshold: 1 }, | ||||
|     ); | ||||
|     observer.observe(element.current); | ||||
|   }, []); | ||||
| 
 | ||||
|   return ( | ||||
|     <span | ||||
|       ref={element} | ||||
|       className={`rounded-md bg-blue-600 px-1 py-0.5 text-white transition-transform delay-500 duration-1000 md:rounded-lg md:px-2.5 md:py-2 ${origin} ${isVisible ? "scale-x-100" : "scale-x-0"} `} | ||||
|     > | ||||
|       <span className="scale-x-100">{props.text}</span> | ||||
|     </span> | ||||
|   ); | ||||
| } | ||||
							
								
								
									
										17
									
								
								frontend/src/lib/home/framework/ui/FirstView.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								frontend/src/lib/home/framework/ui/FirstView.tsx
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | ||||
| import SelfTags from "@/lib/home/framework/ui/SelfTags"; | ||||
| 
 | ||||
| export default function FirstView() { | ||||
|   return ( | ||||
|     <div className="mx-auto flex min-h-[--content-height] max-w-screen-xl flex-col justify-center gap-y-2.5 px-4 md:gap-y-8 md:px-6"> | ||||
|       <h2 className="text-3xl font-bold text-gray-800 md:text-6xl">Hello 大家好!</h2> | ||||
|       <h1 className="flex flex-row items-center gap-x-2 text-4xl font-extrabold text-gray-800 md:text-7xl"> | ||||
|         <span>我是</span> | ||||
|         <div className="rounded-lg bg-blue-600 px-1.5 py-1"> | ||||
|           <span className="text-white">Squid</span> | ||||
|         </div> | ||||
|         <span>魷魚</span> | ||||
|       </h1> | ||||
|       <SelfTags /> | ||||
|     </div> | ||||
|   ); | ||||
| } | ||||
							
								
								
									
										18
									
								
								frontend/src/lib/home/framework/ui/Motto.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								frontend/src/lib/home/framework/ui/Motto.tsx
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,18 @@ | ||||
| import AnimatedMark from "./AnimatedMark"; | ||||
| 
 | ||||
| export default function Motto() { | ||||
|   return ( | ||||
|     <div className="mx-auto flex min-h-[--content-height] max-w-screen-xl flex-col items-center justify-center gap-y-2.5 px-4 md:gap-y-8 md:px-6"> | ||||
|       <div className="flex w-[19rem] flex-col gap-y-3 text-3xl font-bold text-gray-800 md:w-[38rem] md:gap-y-4 md:text-6xl"> | ||||
|         <div className="flex w-full flex-row items-center justify-start gap-x-2.5"> | ||||
|           <span>Keep</span> | ||||
|           <AnimatedMark text="Learning" direction="left" /> | ||||
|         </div> | ||||
|         <div className="flex w-full flex-row items-center justify-end gap-x-2.5 md:gap-x-4"> | ||||
|           <AnimatedMark text="Keep" direction="right" /> | ||||
|           <span>Progressing</span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|   ); | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user