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} - {/* 光晕效果 */} -
- {/* 闪光效果 */} -
+ {/* 动态光效 */} +
); })}
+ + )}