From 5dacbc027db2d58007c2db992836dc08a7a3a2b1 Mon Sep 17 00:00:00 2001 From: katelya Date: Tue, 2 Sep 2025 16:21:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E6=AF=8F=E9=A1=B5?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=9B=86=E6=95=B0=E7=9A=84=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=80=BC=E4=B8=BA=2010=EF=BC=8C=E6=9B=B4=E6=96=B0=E5=AF=BC?= =?UTF-8?q?=E8=88=AA=E6=8C=89=E9=92=AE=E6=A0=B7=E5=BC=8F=E4=BB=A5=E5=A2=9E?= =?UTF-8?q?=E5=BC=BA=E5=8F=AF=E7=94=A8=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/EpisodeSelector.tsx | 212 +++++++++++++++++++++++------ 1 file changed, 172 insertions(+), 40 deletions(-) diff --git a/src/components/EpisodeSelector.tsx b/src/components/EpisodeSelector.tsx index 64f47e1..4b57b6b 100644 --- a/src/components/EpisodeSelector.tsx +++ b/src/components/EpisodeSelector.tsx @@ -23,7 +23,7 @@ interface VideoInfo { interface EpisodeSelectorProps { /** 总集数 */ totalEpisodes: number; - /** 每页显示多少集,默认 50 */ + /** 每页显示多少集,默认 10 */ episodesPerPage?: number; /** 当前选中的集数(1 开始) */ value?: number; @@ -47,7 +47,7 @@ interface EpisodeSelectorProps { */ const EpisodeSelector: React.FC = ({ totalEpisodes, - episodesPerPage = 50, + episodesPerPage = 10, value = 1, onChange, onSourceChange, @@ -314,18 +314,21 @@ const EpisodeSelector: React.FC = ({ <> {/* 分类标签 */}
- {/* 左导航按钮 */} - {currentPage > 0 && ( - - )} + {/* 左导航按钮 - 强制显示用于测试 */} +
@@ -356,18 +359,21 @@ const EpisodeSelector: React.FC = ({
- {/* 右导航按钮 */} - {currentPage < pageCount - 1 && ( - - )} + {/* 右导航按钮 - 强制显示用于测试 */} + {/* 向上/向下按钮 */}
- {/* 集数网格 - 智能响应式布局 */} -
-
+ {/* 集数网格 - 超灵活响应式布局 */} +
+ {/* 调试信息 */} +
+ 总共{totalEpisodes}集 | 每页{episodesPerPage}集 | 当前第{currentPage + 1}页 | 共{pageCount}页 +
+ +
{(() => { const len = currentEnd - currentStart + 1; const episodes = Array.from({ length: len }, (_, i) => @@ -409,29 +420,150 @@ const EpisodeSelector: React.FC = ({ key={episodeNumber} onClick={() => handleEpisodeClick(episodeNumber - 1)} className={` - aspect-square min-h-[36px] min-w-[36px] xs:min-h-[40px] xs:min-w-[40px] sm:min-h-[44px] sm:min-w-[44px] md:min-h-[48px] md:min-w-[48px] lg:min-h-[52px] lg:min-w-[52px] xl:min-h-[56px] xl:min-w-[56px] 2xl:min-h-[60px] 2xl:min-w-[60px] - flex items-center justify-center text-xs sm:text-sm lg:text-base font-bold rounded-lg border-2 - transition-all duration-300 ease-out transform hover:scale-110 active:scale-95 hover:rotate-2 active:rotate-0 - relative overflow-hidden group + episode-btn relative overflow-hidden group + flex items-center justify-center font-bold rounded-xl border-2 + transition-all duration-300 ease-out transform hover:scale-105 active:scale-95 hover:rotate-1 ${ isActive - ? 'bg-gradient-to-br from-emerald-400 via-green-500 to-teal-600 text-white border-emerald-300 shadow-xl shadow-emerald-500/40 dark:from-emerald-500 dark:via-green-600 dark:to-teal-700 dark:border-emerald-400' - : 'bg-gradient-to-br from-slate-100 via-gray-50 to-zinc-100 text-slate-700 border-slate-300 hover:from-blue-50 hover:via-indigo-50 hover:to-purple-50 hover:border-blue-400 hover:text-blue-700 hover:shadow-lg hover:shadow-blue-200/50 dark:from-slate-700 dark:via-gray-800 dark:to-zinc-800 dark:text-slate-200 dark:border-slate-600 dark:hover:from-blue-900/60 dark:hover:via-indigo-900/60 dark:hover:to-purple-900/60 dark:hover:border-blue-500 dark:hover:text-blue-300' + ? 'bg-gradient-to-br from-emerald-400 via-green-500 to-teal-600 text-white border-emerald-300 shadow-2xl shadow-emerald-500/50 scale-105' + : 'bg-gradient-to-br from-white via-gray-50 to-slate-100 text-gray-800 border-gray-300 hover:from-blue-50 hover:via-indigo-50 hover:to-purple-100 hover:border-blue-400 hover:text-blue-700 hover:shadow-xl hover:shadow-blue-200/30 dark:from-slate-700 dark:via-gray-800 dark:to-zinc-800 dark:text-slate-200 dark:border-slate-600 dark:hover:from-blue-900/70 dark:hover:to-purple-900/70 dark:hover:border-blue-500' } `.trim()} > - + {episodeNumber} - {/* 光晕效果 */} -
- {/* 闪光效果 */} -
+ {/* 动态光效 */} +
); })}
+ + )}