|
@@ -1,25 +1,42 @@
|
|
|
<template>
|
|
<template>
|
|
|
- <div id="section1" class="section root">
|
|
|
|
|
- <div class="videocontainer">
|
|
|
|
|
- <video class="fullscreenvideo" playsinline="" autoplay="" muted="" loop=""
|
|
|
|
|
- src="https://lepao-cloud.xxoo365.top/view.php/4f73ff78996ee4520b24e8044eeeeec5.webm" type="video/mp4" />
|
|
|
|
|
- <div class="overlay" />
|
|
|
|
|
|
|
+ <div id="section1" class="section hero-section">
|
|
|
|
|
+ <div class="hero-bg" aria-hidden="true">
|
|
|
|
|
+ <div class="hero-bg-gradient" />
|
|
|
|
|
+ <div class="hero-bg-orb hero-bg-orb--1" />
|
|
|
|
|
+ <div class="hero-bg-orb hero-bg-orb--2" />
|
|
|
|
|
+ <div class="hero-bg-orb hero-bg-orb--3" />
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <Header color="#1b3022" />
|
|
|
|
|
+ <div class="hero-inner">
|
|
|
|
|
+ <Center />
|
|
|
|
|
+ <div class="hero-visual" aria-hidden="true">
|
|
|
|
|
+ <img
|
|
|
|
|
+ class="hero-illustration"
|
|
|
|
|
+ src="@/assets/img/homePage/figma/hero-illustration.png"
|
|
|
|
|
+ alt=""
|
|
|
|
|
+ />
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
- <Header color="white" />
|
|
|
|
|
- <Center />
|
|
|
|
|
|
|
|
|
|
- <a-button shape="circle" class="floating-button" size="large" @click="scrollToSection('section2')">
|
|
|
|
|
|
|
+ <a-button
|
|
|
|
|
+ shape="circle"
|
|
|
|
|
+ class="floating-button"
|
|
|
|
|
+ size="large"
|
|
|
|
|
+ @click="scrollToSection('section2')"
|
|
|
|
|
+ >
|
|
|
<IconDown />
|
|
<IconDown />
|
|
|
</a-button>
|
|
</a-button>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
- <div id="section2" class="section">
|
|
|
|
|
|
|
+ <div id="section2" class="section features-wrap">
|
|
|
|
|
+ <div class="features-bg" aria-hidden="true">
|
|
|
|
|
+ <div class="features-bg-gradient" />
|
|
|
|
|
+ </div>
|
|
|
<Section2 />
|
|
<Section2 />
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="footer">
|
|
|
|
|
|
|
+ <footer class="site-footer">
|
|
|
<span>© {{ new Date().getFullYear() }} RunForge - 智能校园乐跑平台</span>
|
|
<span>© {{ new Date().getFullYear() }} RunForge - 智能校园乐跑平台</span>
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
|
|
+ </footer>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script setup>
|
|
<script setup>
|
|
@@ -28,101 +45,229 @@ import Center from './components/center.vue'
|
|
|
import Section2 from './components/section2.vue'
|
|
import Section2 from './components/section2.vue'
|
|
|
|
|
|
|
|
const scrollToSection = (sectionId) => {
|
|
const scrollToSection = (sectionId) => {
|
|
|
- const section = document.getElementById(sectionId);
|
|
|
|
|
|
|
+ const section = document.getElementById(sectionId)
|
|
|
if (section) {
|
|
if (section) {
|
|
|
- section.scrollIntoView({ behavior: 'smooth' });
|
|
|
|
|
|
|
+ section.scrollIntoView({ behavior: 'smooth' })
|
|
|
}
|
|
}
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
|
|
+}
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
<style lang="less" scoped>
|
|
<style lang="less" scoped>
|
|
|
|
|
+@import './theme.less';
|
|
|
|
|
+
|
|
|
.section {
|
|
.section {
|
|
|
padding: 0;
|
|
padding: 0;
|
|
|
margin: 0;
|
|
margin: 0;
|
|
|
- min-width: 1280px;
|
|
|
|
|
width: 100%;
|
|
width: 100%;
|
|
|
min-height: 100vh;
|
|
min-height: 100vh;
|
|
|
scroll-snap-align: start;
|
|
scroll-snap-align: start;
|
|
|
position: relative;
|
|
position: relative;
|
|
|
|
|
+ box-sizing: border-box;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.root {
|
|
|
|
|
- text-align: center;
|
|
|
|
|
|
|
+.hero-section {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ background: @home-bg-hero;
|
|
|
|
|
+ overflow: hidden;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.fullscreenvideo {
|
|
|
|
|
|
|
+.hero-bg {
|
|
|
position: absolute;
|
|
position: absolute;
|
|
|
- min-width: 100%;
|
|
|
|
|
- min-height: 100%;
|
|
|
|
|
- width: auto;
|
|
|
|
|
- height: auto;
|
|
|
|
|
- z-index: -100;
|
|
|
|
|
- left: 50%;
|
|
|
|
|
- transform: translateX(-50%);
|
|
|
|
|
|
|
+ inset: 0;
|
|
|
|
|
+ z-index: 0;
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+ pointer-events: none;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.videocontainer {
|
|
|
|
|
|
|
+.hero-bg-gradient {
|
|
|
position: absolute;
|
|
position: absolute;
|
|
|
- width: 100%;
|
|
|
|
|
- height: 100%;
|
|
|
|
|
- overflow: hidden;
|
|
|
|
|
- z-index: -100;
|
|
|
|
|
|
|
+ inset: -50%;
|
|
|
|
|
+ width: 200%;
|
|
|
|
|
+ height: 200%;
|
|
|
|
|
+ background: linear-gradient(
|
|
|
|
|
+ -45deg,
|
|
|
|
|
+ @home-gradient-pale,
|
|
|
|
|
+ @home-gradient-mint,
|
|
|
|
|
+ @home-gradient-green,
|
|
|
|
|
+ @home-gradient-teal,
|
|
|
|
|
+ @home-gradient-sage,
|
|
|
|
|
+ @home-gradient-mint
|
|
|
|
|
+ );
|
|
|
|
|
+ background-size: 400% 400%;
|
|
|
|
|
+ animation: homeGradientFlow 14s ease infinite;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.overlay {
|
|
|
|
|
|
|
+.hero-bg-orb {
|
|
|
position: absolute;
|
|
position: absolute;
|
|
|
- width: 100%;
|
|
|
|
|
- height: 100%;
|
|
|
|
|
- background-color: rgba(0, 0, 0, 0.4);
|
|
|
|
|
- z-index: -99;
|
|
|
|
|
|
|
+ border-radius: 50%;
|
|
|
|
|
+ filter: blur(60px);
|
|
|
|
|
+ opacity: 0.55;
|
|
|
|
|
+ animation: homeOrbFloat 18s ease-in-out infinite;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.center {
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- top: 50%;
|
|
|
|
|
- left: 50%;
|
|
|
|
|
- width: 800px;
|
|
|
|
|
- height: 300px;
|
|
|
|
|
- z-index: 2;
|
|
|
|
|
- transform: translate(-50%, -50%);
|
|
|
|
|
- pointer-events: auto;
|
|
|
|
|
- /* center 可以接收鼠标事件 */
|
|
|
|
|
|
|
+.hero-bg-orb--1 {
|
|
|
|
|
+ width: 420px;
|
|
|
|
|
+ height: 420px;
|
|
|
|
|
+ top: -8%;
|
|
|
|
|
+ right: 5%;
|
|
|
|
|
+ background: radial-gradient(circle, fade(@home-gradient-green, 70%) 0%, transparent 70%);
|
|
|
|
|
+ animation-duration: 16s;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.button {
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- z-index: 101;
|
|
|
|
|
|
|
+.hero-bg-orb--2 {
|
|
|
|
|
+ width: 360px;
|
|
|
|
|
+ height: 360px;
|
|
|
|
|
+ bottom: 10%;
|
|
|
|
|
+ left: -5%;
|
|
|
|
|
+ background: radial-gradient(circle, fade(@home-gradient-teal, 65%) 0%, transparent 70%);
|
|
|
|
|
+ animation-duration: 20s;
|
|
|
|
|
+ animation-delay: -4s;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.hero-bg-orb--3 {
|
|
|
|
|
+ width: 280px;
|
|
|
|
|
+ height: 280px;
|
|
|
|
|
+ top: 40%;
|
|
|
|
|
+ left: 35%;
|
|
|
|
|
+ background: radial-gradient(circle, fade(@home-gradient-pale, 80%) 0%, transparent 70%);
|
|
|
|
|
+ animation-duration: 22s;
|
|
|
|
|
+ animation-delay: -8s;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.hero-inner {
|
|
|
|
|
+ position: relative;
|
|
|
|
|
+ z-index: 1;
|
|
|
|
|
+ flex: 1;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: center;
|
|
|
|
|
+ gap: 48px;
|
|
|
|
|
+ max-width: 1200px;
|
|
|
|
|
+ width: 90%;
|
|
|
|
|
+ margin: 0 auto;
|
|
|
|
|
+ padding: 120px 24px 100px;
|
|
|
|
|
+ box-sizing: border-box;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.hero-visual {
|
|
|
|
|
+ flex: 0 0 auto;
|
|
|
|
|
+ max-width: 420px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.hero-illustration {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ max-width: 400px;
|
|
|
|
|
+ height: auto;
|
|
|
|
|
+ object-fit: contain;
|
|
|
|
|
+ filter: drop-shadow(0 16px 40px rgba(27, 48, 34, 0.12));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.floating-button {
|
|
.floating-button {
|
|
|
- background-color: rgba(255, 255, 255, 0.5);
|
|
|
|
|
|
|
+ z-index: 2;
|
|
|
|
|
+ background-color: fade(@home-primary, 12%);
|
|
|
|
|
+ color: @home-primary;
|
|
|
position: absolute;
|
|
position: absolute;
|
|
|
bottom: 50px;
|
|
bottom: 50px;
|
|
|
left: 50%;
|
|
left: 50%;
|
|
|
transform: translateX(-50%);
|
|
transform: translateX(-50%);
|
|
|
- border-radius: 50%;
|
|
|
|
|
- border: none;
|
|
|
|
|
- padding: 10px;
|
|
|
|
|
- transition: background-color 0.3s;
|
|
|
|
|
|
|
+ border: 1px solid fade(@home-primary, 20%);
|
|
|
|
|
+ transition: background-color 0.3s, color 0.3s;
|
|
|
|
|
+
|
|
|
|
|
+ &:hover {
|
|
|
|
|
+ background-color: @home-primary;
|
|
|
|
|
+ color: #fff;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.features-wrap {
|
|
|
|
|
+ min-height: auto;
|
|
|
|
|
+ background: @home-bg-page;
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.features-bg {
|
|
|
|
|
+ position: absolute;
|
|
|
|
|
+ inset: 0;
|
|
|
|
|
+ z-index: 0;
|
|
|
|
|
+ pointer-events: none;
|
|
|
|
|
+ overflow: hidden;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.footer {
|
|
|
|
|
- cursor: pointer;
|
|
|
|
|
|
|
+.features-bg-gradient {
|
|
|
|
|
+ position: absolute;
|
|
|
|
|
+ inset: -40%;
|
|
|
|
|
+ width: 180%;
|
|
|
|
|
+ height: 180%;
|
|
|
|
|
+ background: linear-gradient(
|
|
|
|
|
+ 120deg,
|
|
|
|
|
+ @home-bg-page,
|
|
|
|
|
+ fade(@home-gradient-mint, 55%),
|
|
|
|
|
+ @home-bg-page,
|
|
|
|
|
+ fade(@home-gradient-teal, 40%),
|
|
|
|
|
+ @home-bg-page
|
|
|
|
|
+ );
|
|
|
|
|
+ background-size: 300% 300%;
|
|
|
|
|
+ animation: homeGradientFlow 18s ease infinite reverse;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.features-wrap > :not(.features-bg) {
|
|
|
position: relative;
|
|
position: relative;
|
|
|
- bottom: 15px;
|
|
|
|
|
- left: 50%;
|
|
|
|
|
- transform: translateX(-50%);
|
|
|
|
|
- color: #777;
|
|
|
|
|
- font-size: 12px;
|
|
|
|
|
- display: flex;
|
|
|
|
|
- min-width: 300px;
|
|
|
|
|
- justify-content: center;
|
|
|
|
|
- gap: 10px;
|
|
|
|
|
|
|
+ z-index: 1;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+@keyframes homeGradientFlow {
|
|
|
|
|
+ 0% {
|
|
|
|
|
+ background-position: 0% 50%;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ 50% {
|
|
|
|
|
+ background-position: 100% 50%;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ 100% {
|
|
|
|
|
+ background-position: 0% 50%;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+@keyframes homeOrbFloat {
|
|
|
|
|
+ 0%,
|
|
|
|
|
+ 100% {
|
|
|
|
|
+ transform: translate(0, 0) scale(1);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ 33% {
|
|
|
|
|
+ transform: translate(28px, -24px) scale(1.06);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ 66% {
|
|
|
|
|
+ transform: translate(-22px, 18px) scale(0.94);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+@media (prefers-reduced-motion: reduce) {
|
|
|
|
|
+ .hero-bg-gradient,
|
|
|
|
|
+ .hero-bg-orb,
|
|
|
|
|
+ .features-bg-gradient {
|
|
|
|
|
+ animation: none;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- a {
|
|
|
|
|
- color: #777;
|
|
|
|
|
|
|
+ .hero-bg-gradient {
|
|
|
|
|
+ inset: 0;
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ height: 100%;
|
|
|
|
|
+ background: linear-gradient(135deg, @home-bg-hero 0%, @home-bg-hero-end 55%, @home-gradient-sage 100%);
|
|
|
|
|
+ background-size: 100% 100%;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+.site-footer {
|
|
|
|
|
+ background: @home-primary;
|
|
|
|
|
+ color: fade(#fff, 75%);
|
|
|
|
|
+ font-size: 13px;
|
|
|
|
|
+ text-align: center;
|
|
|
|
|
+ padding: 20px 16px;
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ box-sizing: border-box;
|
|
|
|
|
+}
|
|
|
</style>
|
|
</style>
|