2026-04-10 16:10:07 +08:00

133 lines
5.6 KiB
Vue
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.

<script setup lang="ts">
import {
Swords, BookOpenCheck, Star, Zap,
MessageCircle, Target, Smile, ShieldCheck,
} from 'lucide-vue-next'
import { useScrollReveal } from '@/composables/useScrollReveal'
import tabletImg from '@/assets/xuesheng.png'
const { target, isVisible } = useScrollReveal()
const features = [
{
icon: Swords,
title: '内容闯关',
desc: '关卡式互动体验,普通/困难双模式,每通一关都有满满成就感',
tag: '最受欢迎',
},
{
icon: BookOpenCheck,
title: '精品内容体系',
desc: '从入门到进阶,科学分级内容路径,持续提升核心能力',
},
{
icon: Star,
title: '积分激励',
desc: '完成任务赚积分和钻石,兑换奖励,参与变成收获的过程',
},
{
icon: Zap,
title: '自由探索模式',
desc: '按分类自主选择内容,灵活掌握节奏和方向',
},
{
icon: MessageCircle,
title: '智能助手',
desc: '智能陪伴随时答疑解惑像拥有一位24小时私人顾问',
},
{
icon: Target,
title: '精准推荐',
desc: '智能分析薄弱环节,定向推送相关内容,告别无效重复',
},
{
icon: Smile,
title: '积极心态',
desc: '「3 件好事」与微笑打卡,关注心理健康,培养积极心态',
},
{
icon: ShieldCheck,
title: '进度助手',
desc: '个性化计划 + 进度追踪,帮助养成自律好习惯',
},
]
</script>
<template>
<section id="app" class="relative py-24 lg:py-32 bg-gradient-to-b from-white to-bg-soft overflow-hidden">
<div class="absolute top-40 -right-60 w-[500px] h-[500px] rounded-full bg-primary/5 blur-3xl" />
<div class="absolute bottom-20 -left-40 w-[400px] h-[400px] rounded-full bg-accent/5 blur-3xl" />
<div class="absolute top-20 right-10 lg:right-20 opacity-[0.04]" style="background-image: radial-gradient(circle, #4F46E5 1.5px, transparent 1.5px); background-size: 24px 24px; width: 200px; height: 200px;" />
<div ref="target" class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="grid lg:grid-cols-12 gap-12 lg:gap-8 items-start">
<div
class="lg:col-span-5 lg:sticky lg:top-28 transition-all duration-700"
:class="isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-8'"
>
<p class="text-sm font-semibold text-primary tracking-wider uppercase mb-3">体验端</p>
<h2 class="text-3xl sm:text-4xl lg:text-[2.75rem] font-extrabold text-text-heading leading-tight">
趣味互动<br />
<span class="gradient-text">探索不止</span>
</h2>
<p class="text-lg text-text-muted mt-5 leading-relaxed">
告别枯燥模式灵犀学用趣味化机制点燃参与热情排行榜成就徽章虚拟奖励让用户主动投入其中
</p>
<div class="mt-10 flex justify-center">
<div class="relative w-full max-w-md">
<div class="rounded-2xl bg-gradient-to-br from-[#1E1B4B] to-[#312E81] p-2.5 shadow-2xl">
<div class="rounded-xl overflow-hidden bg-[#0F0D2E] aspect-[16/10]">
<img :src="tabletImg" alt="灵犀学体验端界面" class="w-full h-full object-cover" />
</div>
</div>
<div class="absolute -right-6 top-6 glass-card rounded-xl px-3 py-2 shadow-lg animate-float-slow hidden sm:block">
<div class="flex items-center gap-1.5">
<svg class="w-4 h-4 text-amber-500" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>
<span class="text-xs font-bold text-amber-600">+100 积分</span>
</div>
</div>
</div>
</div>
</div>
<div class="lg:col-span-7 grid sm:grid-cols-2 gap-4">
<div
v-for="(feat, i) in features"
:key="feat.title"
class="group relative p-5 rounded-2xl bg-white border border-gray-100 hover:border-primary/20 hover:shadow-lg hover:shadow-primary/5 hover:-translate-y-0.5 transition-all duration-300 cursor-pointer"
:class="isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-6'"
:style="{ transitionDelay: isVisible ? `${200 + i * 80}ms` : '0ms', transitionDuration: '600ms' }"
>
<div class="absolute -bottom-4 -right-4 w-20 h-20 rounded-full bg-primary/[0.03] group-hover:bg-primary/[0.06] transition-colors duration-500" />
<span
v-if="feat.tag"
class="absolute -top-3 right-4 text-xs font-semibold px-2.5 py-0.5 rounded-full bg-gradient-to-r from-primary to-primary-light text-white shadow-sm z-10"
>
{{ feat.tag }}
</span>
<div class="relative">
<div class="w-11 h-11 rounded-xl bg-primary/8 flex items-center justify-center mb-3.5 group-hover:bg-primary/12 group-hover:scale-110 transition-all duration-300">
<component :is="feat.icon" class="w-5.5 h-5.5 text-primary" />
</div>
<h4 class="text-base font-bold text-text-heading mb-1.5">{{ feat.title }}</h4>
<p class="text-sm text-text-muted leading-relaxed">{{ feat.desc }}</p>
</div>
</div>
</div>
</div>
</div>
</section>
</template>
<style scoped>
@keyframes float-slow {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-10px); }
}
.animate-float-slow { animation: float-slow 5s ease-in-out infinite; }
</style>