Files
quant-speed_page/src/components/HeroSection.js
jeremygan2021 d41066f32e 1
2026-02-13 09:55:41 +08:00

188 lines
5.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import React from 'react';
import { motion } from 'framer-motion';
const HeroSection = ({ isActive }) => {
return (
<div className="hero-section-minimal">
{/* 左侧主要内容 */}
<motion.div
className="hero-left"
initial={{ opacity: 0, x: -60 }}
animate={isActive ? { opacity: 1, x: 0 } : {}}
transition={{ duration: 1.2, delay: 0.3 }}
>
<motion.h1
className="hero-main-title"
initial={{ opacity: 0, y: 40 }}
animate={isActive ? { opacity: 1, y: 0 } : {}}
transition={{ duration: 0.8, delay: 0.6 }}
>
推动线下AI变革
</motion.h1>
<motion.h2
className="hero-subtitle"
initial={{ opacity: 0, y: 40 }}
animate={isActive ? { opacity: 1, y: 0 } : {}}
transition={{ duration: 0.8, delay: 0.8 }}
>
<span className="highlight-text">通过</span> 线
<br />
普及人工智能技术
</motion.h2>
<motion.div
className="hero-quote"
initial={{ opacity: 0, x: -20 }}
animate={isActive ? { opacity: 1, x: 0 } : {}}
transition={{ duration: 0.8, delay: 1.2 }}
>
<div className="quote-line"></div>
<p>
通过软硬件一体的整体解决方案
<br />
量迹AI用普惠的解决方案
<br />
让人类进入AI时代
</p>
</motion.div>
<motion.button
className="learn-more-btn"
initial={{ opacity: 0, y: 30 }}
animate={isActive ? { opacity: 1, y: 0 } : {}}
transition={{ duration: 0.8, delay: 1.6 }}
whileHover={{
scale: 1.05,
y: -3,
boxShadow: "0 10px 30px rgba(0, 245, 212, 0.3)"
}}
whileTap={{ scale: 0.95 }}
>
<span className="btn-text">了解更多</span>
<div className="btn-glow"></div>
<div className="btn-arrow"></div>
</motion.button>
</motion.div>
{/* 右侧几何形状 */}
<motion.div
className="hero-right"
initial={{ opacity: 0, scale: 0.8 }}
animate={isActive ? { opacity: 1, scale: 1 } : {}}
transition={{ duration: 1.5, delay: 0.5 }}
>
{/* 背景视频 */}
<video
className="hero-background-video"
autoPlay
muted
loop
playsInline
controls={false}
preload="auto"
src="https://tangledup-ai-staging.oss-cn-shanghai.aliyuncs.com/web/quant-speed_page/public/stay.mp4"
onError={(e) => console.error('Video error:', e)}
onLoadStart={() => console.log('Video loading started')}
onCanPlay={() => console.log('Video can play')}
/>
<div className="geometric-container">
{/* 小立方体 */}
<motion.div
className="cube-small"
initial={{ rotateY: 0, rotateX: 0 }}
animate={isActive ? {
rotateY: 360,
rotateX: [0, 30, 0]
} : {}}
transition={{
duration: 15,
repeat: Infinity,
ease: "linear"
}}
>
<div className="cube-face front"></div>
{/* <div className="cube-face back"></div> */}
<div className="cube-face right"></div>
<div className="cube-face left"></div>
<div className="cube-face top"></div>
<div className="cube-face bottom"></div>
</motion.div>
{/* 浮动圆环 */}
<motion.div
className="floating-ring"
initial={{ rotateZ: 0, y: 0 }}
animate={isActive ? {
rotateZ: 360,
y: [0, -20, 0]
} : {}}
transition={{
duration: 20,
repeat: Infinity,
ease: "linear"
}}
/>
{/* 浮动粒子 */}
<motion.div
className="floating-particle particle-1"
initial={{ x: 0, y: 0, opacity: 0 }}
animate={isActive ? {
x: [0, 40, -20, 0],
y: [0, -30, 20, 0],
opacity: [0, 0.6, 0.3, 0]
} : {}}
transition={{
duration: 8,
repeat: Infinity,
ease: "easeInOut",
delay: 1
}}
/>
<motion.div
className="floating-particle particle-2"
initial={{ x: 0, y: 0, opacity: 0 }}
animate={isActive ? {
x: [0, -60, 30, 0],
y: [0, 40, -25, 0],
opacity: [0, 0.4, 0.6, 0]
} : {}}
transition={{
duration: 12,
repeat: Infinity,
ease: "easeInOut",
delay: 3
}}
/>
</div>
</motion.div>
{/* 底部进度指示器 */}
<motion.div
className="hero-progress"
initial={{ opacity: 0, y: 20 }}
animate={isActive ? { opacity: 1, y: 0 } : {}}
transition={{ duration: 0.8, delay: 1.5 }}
>
<div className="progress-bar">
<motion.div
className="progress-fill"
initial={{ width: "0%" }}
animate={isActive ? { width: "23%" } : {}}
transition={{ duration: 2, delay: 2 }}
></motion.div>
</div>
<div className="progress-info">
<span className="progress-time">00:04</span>
<span className="progress-total">00:18</span>
</div>
</motion.div>
</div>
);
};
export default HeroSection;