feat: 모바일 곡 상세 페이지 애니메이션 개선

- 앨범 상세 페이지와 동일한 순차 애니메이션 적용
- 툴바 제목 "곡 상세" → "앨범"으로 변경

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
caadiq 2026-01-24 10:38:37 +09:00
parent 821ff64bad
commit 0c6d250a9d
2 changed files with 17 additions and 18 deletions

View file

@ -92,19 +92,18 @@ function MobileTrackDetail() {
} }
return ( return (
<motion.div initial={{ opacity: 0 }} animate={{ opacity: 1 }} transition={{ duration: 0.3 }} className="pb-4"> <div className="pb-4">
{/* 트랙 정보 헤더 */} {/* 트랙 정보 헤더 */}
<div className="px-4 py-5"> <motion.div
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
className="px-4 py-5"
>
<div className="flex gap-4 items-start"> <div className="flex gap-4 items-start">
{/* 앨범 커버 */} {/* 앨범 커버 */}
<motion.div <div className="w-24 h-24 rounded-xl overflow-hidden shadow-md flex-shrink-0">
initial={{ opacity: 0, scale: 0.9 }}
animate={{ opacity: 1, scale: 1 }}
transition={{ duration: 0.3 }}
className="w-24 h-24 rounded-xl overflow-hidden shadow-md flex-shrink-0"
>
<img src={track.album?.cover_medium_url} alt={track.album?.title} className="w-full h-full object-cover" /> <img src={track.album?.cover_medium_url} alt={track.album?.title} className="w-full h-full object-cover" />
</motion.div> </div>
{/* 트랙 정보 */} {/* 트랙 정보 */}
<div className="flex-1 min-w-0"> <div className="flex-1 min-w-0">
@ -129,14 +128,14 @@ function MobileTrackDetail() {
)} )}
</div> </div>
</div> </div>
</div> </motion.div>
{/* 뮤직비디오 섹션 */} {/* 뮤직비디오 섹션 */}
{youtubeVideoId && ( {youtubeVideoId && (
<motion.div <motion.div
initial={{ opacity: 0, y: 10 }} initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }} animate={{ opacity: 1, y: 0 }}
transition={{ delay: 0.1, duration: 0.3 }} transition={{ delay: 0.15 }}
className="px-4 mb-5" className="px-4 mb-5"
> >
<h2 className="text-base font-bold mb-3 flex items-center gap-2"> <h2 className="text-base font-bold mb-3 flex items-center gap-2">
@ -158,9 +157,9 @@ function MobileTrackDetail() {
{/* 크레딧 */} {/* 크레딧 */}
{(track.lyricist || track.composer || track.arranger) && ( {(track.lyricist || track.composer || track.arranger) && (
<motion.div <motion.div
initial={{ opacity: 0, y: 10 }} initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }} animate={{ opacity: 1, y: 0 }}
transition={{ delay: 0.15, duration: 0.3 }} transition={{ delay: 0.2 }}
className="px-4 mb-5" className="px-4 mb-5"
> >
<h2 className="text-base font-bold mb-3 flex items-center gap-2"> <h2 className="text-base font-bold mb-3 flex items-center gap-2">
@ -207,9 +206,9 @@ function MobileTrackDetail() {
{/* 가사 */} {/* 가사 */}
<motion.div <motion.div
initial={{ opacity: 0, y: 10 }} initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }} animate={{ opacity: 1, y: 0 }}
transition={{ delay: 0.2, duration: 0.3 }} transition={{ delay: 0.25 }}
className="px-4" className="px-4"
> >
<h2 className="text-base font-bold mb-3 flex items-center gap-2"> <h2 className="text-base font-bold mb-3 flex items-center gap-2">
@ -251,7 +250,7 @@ function MobileTrackDetail() {
)} )}
</div> </div>
</motion.div> </motion.div>
</motion.div> </div>
); );
} }

View file

@ -75,7 +75,7 @@ export default function MobileRoutes() {
<Route <Route
path="/album/:name/track/:trackTitle" path="/album/:name/track/:trackTitle"
element={ element={
<Layout pageTitle="곡 상세"> <Layout pageTitle="앨범">
<TrackDetail /> <TrackDetail />
</Layout> </Layout>
} }