Files
love-key-web/src/components/PageHome.vue
2026-02-27 16:03:45 +08:00

276 lines
5.4 KiB
Vue

<template>
<section class="page page-home">
<!-- 背景图层 -->
<img src="/src/assets/images/bg-top.png" class="bg-main" />
<img src="/src/assets/images/bg-top-points.png" class="bg-points" />
<div class="hero">
<div class="hero-phones">
<div class="hero-content">
<h1 class="hero-title anim-item">
Not just a tool but<br />
giving meaning to every click
</h1>
<div class="hero-buttons anim-item">
<a href="#"><img src="/src/assets/images/android.png" class="btn-img" /></a>
<a href="#"><img src="/src/assets/images/appStore.png" class="btn-img" /></a>
</div>
</div>
<img src="/src/assets/images/bg-top-phone.png" class="phone-main anim-item" />
</div>
<div class="deco deco-coin1">🎁</div>
<div class="deco deco-coin2">🏆</div>
<div class="deco deco-star1"></div>
<div class="deco deco-star2"></div>
</div>
</section>
</template>
<script setup>
</script>
<style scoped lang="less">
.page-home {
width: 100%;
height: 100vh;
background: none;
color: #222;
display: flex;
flex-direction: column;
position: relative;
overflow: hidden;
}
.bg-main {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
z-index: 0;
pointer-events: none;
}
.bg-points {
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 96%;
height: 96%;
object-fit: contain;
z-index: 1;
pointer-events: none;
}
.nav {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 @nav-px;
height: @nav-h;
position: relative;
z-index: 10;
flex-shrink: 0;
}
.nav-logo {
display: flex;
align-items: center;
gap: clamp(6px, 0.5vw, 12px);
.logo-img {
height: clamp(28px, 2.5vh, 52px);
}
}
.logo-text {
font-weight: 600;
color: #333;
font-size: @font-nav;
font-style: italic;
}
.nav-links {
display: flex;
gap: clamp(16px, 2vw, 48px);
a {
font-size: @font-nav;
color: #000000;
transition: color 0.3s;
font-weight: 600;
&:hover { color: #00BFA5; }
}
}
.hero {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
padding-top: clamp(10px, 1.5vh, 30px);
position: relative;
z-index: 1;
}
.hero-content {
text-align: center;
margin-bottom: clamp(20px, 2.5vh, 50px);
}
.hero-emoji {
font-size: clamp(32px, 3.5vw, 72px);
margin-bottom: clamp(8px, 0.8vh, 16px);
}
.hero-title {
font-size: @font-hero;
font-weight: 800;
line-height: 1.3;
color: #1a1a1a;
margin-bottom: clamp(16px, 2vh, 40px);
animation: none;
}
.hero-buttons {
display: flex;
gap: clamp(10px, 3vw, 35px);
justify-content: center;
animation: none;
}
.btn-img {
height: clamp(36px, 6.6vh, 120px);
width: auto;
display: block;
transition: transform 0.3s, filter 0.3s;
&:hover {
transform: translateY(-3px) scale(1.04);
filter: drop-shadow(0 8px 16px rgba(0,0,0,0.15));
}
}
.btn {
display: inline-flex;
align-items: center;
gap: clamp(6px, 0.5vw, 10px);
padding: clamp(10px, 0.8vh, 18px) clamp(20px, 1.8vw, 40px);
border-radius: 50px;
font-size: @font-btn;
font-weight: 600;
cursor: pointer;
transition: all 0.3s;
}
.btn-primary {
background: #00BFA5;
color: #fff;
&:hover {
background: #00A98E;
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(0, 191, 165, 0.35);
}
}
.btn-icon { font-size: 0.85em; }
.hero-phones {
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-end;
}
.hero-content {
text-align: center;
margin-bottom: clamp(16px, 2vh, 36px);
}
.phone-main {
height: clamp(330px, 58vh, 780px);
width: auto;
display: block;
animation: none;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes fadeSlideUp {
from { opacity: 0; transform: translateY(40px); }
to { opacity: 1; transform: translateY(0); }
}
.phone-placeholder {
border: 2px dashed #ddd;
border-radius: clamp(16px, 1.5vw, 32px);
display: flex;
align-items: center;
justify-content: center;
color: #bbb;
font-size: @font-small;
background: #fafafa;
}
.phone-center {
width: @phone-w-main;
height: @phone-h-main;
z-index: 2;
}
.phone-left {
width: @phone-w-side;
height: @phone-h-side;
transform: rotate(-6deg);
z-index: 1;
}
.phone-right {
width: @phone-w-side;
height: @phone-h-side;
transform: rotate(6deg);
z-index: 1;
}
.deco {
position: absolute;
font-size: clamp(20px, 2.2vw, 52px);
z-index: 0;
animation: float 3s ease-in-out infinite;
}
.deco-coin1 { top: 30%; left: 8%; animation-delay: 0s; }
.deco-coin2 { top: 25%; right: 8%; animation-delay: 0.5s; }
.deco-star1 { top: 50%; left: 15%; font-size: clamp(16px, 1.6vw, 38px); animation-delay: 1s; }
.deco-star2 { top: 45%; right: 15%; font-size: clamp(14px, 1.3vw, 32px); animation-delay: 1.5s; }
@keyframes float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-10px); }
}
@media (max-width: 768px) {
.hero-phones { gap: 8px; }
.phone-center { width: 140px; height: 260px; }
.phone-left, .phone-right { width: 110px; height: 210px; }
.deco { display: none; }
.phone-main {
height: clamp(330px, 58vh, 780px);
width: auto;
}
.hero-content {
text-align: center;
margin-bottom: clamp(16px, 6vh, 60px);
}
}
</style>