blob: 80e44eb75670fd4ff6a2897fe2e1279814ae91e4 [file] [log] [blame]
import { NavLink } from 'react-router';
import filmImg from '../../assets/categories/film.jpg';
import musicImg from '../../assets/categories/music.jpg';
import gameImg from '../../assets/categories/game.jpg';
import otherImg from '../../assets/categories/other.jpg';
// 假设你有排行榜数据,这里模拟一下,实际根据接口等替换
const filmRankList = [
{ id: 1, name: '影视作品1', view: '1.2万' },
{ id: 2, name: '影视作品2', view: '1.1万' },
{ id: 3, name: '影视作品3', view: '1.0万' },
];
const musicRankList = [
{ id: 1, name: '音乐作品1', view: '1.5万' },
{ id: 2, name: '音乐作品2', view: '1.3万' },
{ id: 3, name: '音乐作品3', view: '1.2万' },
];
const gameRankList = [
{ id: 1, name: '游戏作品1', view: '2.0万' },
{ id: 2, name: '游戏作品2', view: '1.8万' },
{ id: 3, name: '游戏作品3', view: '1.6万' },
];
const otherRankList = [
{ id: 1, name: '其他作品1', view: '0.8万' },
{ id: 2, name: '其他作品2', view: '0.7万' },
{ id: 3, name: '其他作品3', view: '0.6万' },
];
function Home() {
const categories = [
{ id: 'film', name: '影视', image: filmImg, rankList: filmRankList },
{ id: 'music', name: '音乐', image: musicImg, rankList: musicRankList },
{ id: 'game', name: '游戏', image: gameImg, rankList: gameRankList },
{ id: 'other', name: '其他', image: otherImg, rankList: otherRankList },
];
return (
<div className="max-w-7xl mx-auto px-4 py-16 flex flex-col items-center">
{/* 页面标题 */}
<h1 className="text-[clamp(2rem,5vw,3.5rem)] font-bold text-center mb-12 text-gray-800 tracking-tight">
欢迎访问创意协作平台
</h1>
{/* 分区 + 排行榜 容器,改为 flex 布局 */}
<div className="w-full flex max-w-6xl mx-auto">
{/* 分区卡片容器 - 响应式网格布局 */}
<div className="grid grid-cols-4 gap-6 w-3/4">
{categories.map((category) => (
<div
key={category.id}
className="group relative overflow-hidden rounded-xl shadow-lg transition-all duration-300 hover:-translate-y-2 hover:shadow-xl"
>
<NavLink to={`/categories/${category.id}`} className="block">
{/* 图片容器 */}
<div className="aspect-[4/3] relative overflow-hidden">
{/* 背景图片 - 带模糊和亮度调整 */}
<img
src={category.image}
alt={category.name}
className="w-full h-full object-cover transition-transform duration-700 group-hover:scale-110"
style={{ filter: 'blur(1px) brightness(0.85)' }}
/>
{/* 渐变遮罩层 - 增强文字可读性 */}
<div className="absolute inset-0 bg-gradient-to-t from-black/80 via-black/40 to-transparent z-10"></div>
{/* 文字内容 */}
<div className="absolute inset-0 flex flex-col items-center justify-center p-4 z-20">
{/* 分类标题 - 艺术字体 */}
<h2 className="text-[clamp(1.8rem,4vw,2.5rem)] font-bold text-white text-center mb-2" style={{
fontFamily: '"Playfair Display", serif',
textShadow: '0 4px 12px rgba(0,0,0,0.8)',
transform: 'translateY(10px)',
transition: 'transform 0.3s ease-out',
letterSpacing: '2px',
borderBottom: '2px solid rgba(255,255,255,0.6)',
paddingBottom: '4px'
}}>
{category.name}
</h2>
{/* 描述文本 - 悬停显示 */}
<p className="text-indigo-100 text-center opacity-0 transform translate-y-4 transition-all duration-300 group-hover:opacity-100 group-hover:translate-y-0 mt-2" style={{
fontFamily: '"Merriweather", serif',
textShadow: '0 2px 6px rgba(0,0,0,0.6)'
}}>
探索{category.name}创意项目
</p>
</div>
</div>
</NavLink>
</div>
))}
</div>
{/* 排行榜区域 - 右侧 */}
<div className="w-1/4 pl-6">
{categories.map((category) => (
<div key={category.id} className="mb-8">
<h3 className="text-xl font-bold text-gray-800 mb-4">{category.name}排行榜</h3>
<ul>
{category.rankList.map((item) => (
<li key={item.id} className="flex justify-between items-center mb-2">
<span>{item.name}</span>
<span className="text-gray-600">{item.view}</span>
</li>
))}
</ul>
</div>
))}
</div>
</div>
</div>
);
}
export default Home;