From 7e49b48d0fc18d25a61c5ff88f67b4d1f3bf4acc Mon Sep 17 00:00:00 2001 From: moux1024 <403053463@qq.com> Date: Wed, 24 Sep 2025 15:24:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20h5=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E4=BD=BF=E7=94=A8card=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/pages/home-page2.tsx | 2 +- components/ui/VideoCoverflow.tsx | 41 +++++++++++++++++++------------- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/components/pages/home-page2.tsx b/components/pages/home-page2.tsx index 0eb4bba..f75a0c4 100644 --- a/components/pages/home-page2.tsx +++ b/components/pages/home-page2.tsx @@ -276,7 +276,7 @@ export function HomePage2() { {/* 动态锚点:来源于服务端 homeTab 配置,title 作为锚点与标题 */} {homeTabs.map((tab) => ( -
(sectionRefs.current as any)[tab.title.toLowerCase()] = el}> +
(sectionRefs.current as any)[tab.title.toLowerCase()] = el}>
))} diff --git a/components/ui/VideoCoverflow.tsx b/components/ui/VideoCoverflow.tsx index b64b350..5f1bd1c 100644 --- a/components/ui/VideoCoverflow.tsx +++ b/components/ui/VideoCoverflow.tsx @@ -2,11 +2,13 @@ import React from 'react'; import { Swiper, SwiperSlide } from 'swiper/react'; -import { Autoplay, EffectCoverflow } from 'swiper/modules'; +import { Autoplay, EffectCoverflow, EffectCards } from 'swiper/modules'; import type { Swiper as SwiperType } from 'swiper/types'; +import { useDeviceType } from '@/hooks/useDeviceType'; import 'swiper/css'; import 'swiper/css/effect-coverflow'; +import 'swiper/css/effect-cards'; /** 默认视频列表(来自 home-page2.tsx 中的数组) */ const DEFAULT_VIDEOS: string[] = [ @@ -40,21 +42,22 @@ const VideoCoverflow: React.FC = ({ }) => { const swiperRef = React.useRef(null); const videoRefs = React.useRef>({}); - const [isMobile, setIsMobile] = React.useState(false); + const { isMobile } = useDeviceType(); const [activeIndex, setActiveIndex] = React.useState(0); const playActive = React.useCallback((activeIndex: number) => { Object.entries(videoRefs.current).forEach(([key, el]) => { - if (!el) return; + const video = el as HTMLVideoElement | null; + if (!video) return; const index = Number(key); if (index === activeIndex) { // 尝试播放当前居中视频 - el.play().catch(() => {}); + video.play().catch(() => {}); } else { // 暂停其他视频,重置到起点以减少解码负担 - el.pause(); + video.pause(); try { - el.currentTime = 0; + video.currentTime = 0; } catch {} } }); @@ -115,28 +118,32 @@ const VideoCoverflow: React.FC = ({

{videos.map((src, index) => ( -
+