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) => (
-
+