-
BINsrc/assets/img/wealth/bg.png
-
BINsrc/assets/img/wealth/button.png
-
BINsrc/assets/img/wealth/gai.png
-
BINsrc/assets/img/wealth/history.png
-
BINsrc/assets/img/wealth/home.png
-
BINsrc/assets/img/wealth/rule.png
-
BINsrc/assets/img/wealth/tanchuang.png
-
BINsrc/assets/img/wealth/wheel.png
-
BINsrc/assets/img/wealth/zhizhen.png
-
9src/router/index.js
-
343src/views/wealth/goldenWheel.vue
After Width: 375 | Height: 812 | Size: 260 KiB |
After Width: 240 | Height: 94 | Size: 24 KiB |
After Width: 120 | Height: 123 | Size: 29 KiB |
After Width: 25 | Height: 25 | Size: 1.2 KiB |
After Width: 23 | Height: 25 | Size: 1.2 KiB |
After Width: 25 | Height: 25 | Size: 1.1 KiB |
After Width: 104 | Height: 22 | Size: 406 B |
After Width: 333 | Height: 334 | Size: 126 KiB |
After Width: 45 | Height: 89 | Size: 4.9 KiB |
@ -0,0 +1,343 @@ |
|||||
|
<template> |
||||
|
<div class="app-container"> |
||||
|
<!-- 背景图 --> |
||||
|
<img class="bg-image" src="@/assets/img/wealth/bg.png" alt="背景"> |
||||
|
|
||||
|
<!-- 顶部栏 --> |
||||
|
<div class="header"> |
||||
|
<div class="expire-time">到期时间: 2023-12-31</div> |
||||
|
<div class="icons"> |
||||
|
<div class="icon-btn"> |
||||
|
<img src="@/assets/img/wealth/history.png" alt="历史记录"> |
||||
|
</div> |
||||
|
<div class="icon-btn"> |
||||
|
<img src="@/assets/img/wealth/rule.png" alt="规则"> |
||||
|
</div> |
||||
|
<div class="icon-btn"> |
||||
|
<img src="@/assets/img/wealth/home.png" alt="首页"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<!-- 标题图片 --> |
||||
|
<img class="title-image" src="@/assets/img/wealth/text.png" alt="转动财富金轮 开启财富人生"> |
||||
|
|
||||
|
<!-- 转盘区域 --> |
||||
|
<div class="wheel-container"> |
||||
|
<img class="pointer-cover" src="@/assets/img/wealth/gai.png" alt="指针盖"> |
||||
|
<img class="pointer" src="@/assets/img/wealth/zhizhen.png" alt="指针"> |
||||
|
<img class="wheel" :style="{ transform: `rotate(${wheelRotation}deg)` }" src="@/assets/img/wealth/wheel.png" alt="财富金轮"> |
||||
|
</div> |
||||
|
|
||||
|
<!-- 底部区域 --> |
||||
|
<div class="bottom-section"> |
||||
|
<img class="popup-image" src="@/assets/img/wealth/tanchuang.png" alt="弹出窗口"> |
||||
|
<button class="spin-button" @click="spinWheel">开始抽奖</button> |
||||
|
</div> |
||||
|
|
||||
|
<!-- 中奖弹窗 --> |
||||
|
<div class="prize-popup" :class="{ active: showPrizePopup }"> |
||||
|
<div class="popup-content"> |
||||
|
<span class="close-popup" @click="showPrizePopup = false">×</span> |
||||
|
<h2 class="prize-title">恭喜您获得大奖!</h2> |
||||
|
<p class="prize-desc">您已获得888元现金红包</p> |
||||
|
<button class="claim-btn" @click="claimPrize">立即领取</button> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { ref } from 'vue'; |
||||
|
|
||||
|
export default { |
||||
|
name: 'App', |
||||
|
setup() { |
||||
|
const wheelRotation = ref(0); |
||||
|
const showPrizePopup = ref(false); |
||||
|
const isSpinning = ref(false); |
||||
|
|
||||
|
const spinWheel = () => { |
||||
|
if (isSpinning.value) return; |
||||
|
|
||||
|
isSpinning.value = true; |
||||
|
// 随机旋转角度 (至少5圈以上) |
||||
|
const rounds = 5 + Math.floor(Math.random() * 5); |
||||
|
const extraDegrees = Math.floor(Math.random() * 360); |
||||
|
const totalRotation = rounds * 360 + extraDegrees; |
||||
|
|
||||
|
wheelRotation.value = totalRotation; |
||||
|
|
||||
|
// 模拟抽奖过程,4秒后显示结果 |
||||
|
setTimeout(() => { |
||||
|
showPrizePopup.value = true; |
||||
|
isSpinning.value = false; |
||||
|
}, 4000); |
||||
|
}; |
||||
|
|
||||
|
const claimPrize = () => { |
||||
|
alert('奖品领取成功!'); |
||||
|
showPrizePopup.value = false; |
||||
|
}; |
||||
|
|
||||
|
return { |
||||
|
wheelRotation, |
||||
|
showPrizePopup, |
||||
|
spinWheel, |
||||
|
claimPrize |
||||
|
}; |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
|
||||
|
<style> |
||||
|
* { |
||||
|
margin: 0; |
||||
|
padding: 0; |
||||
|
box-sizing: border-box; |
||||
|
-webkit-tap-highlight-color: transparent; |
||||
|
} |
||||
|
|
||||
|
body { |
||||
|
font-family: 'PingFang SC', 'Helvetica Neue', Arial, sans-serif; |
||||
|
background: linear-gradient(135deg, #2c3e50 0%, #1a1a2e 100%); |
||||
|
color: #fff; |
||||
|
overflow: hidden; |
||||
|
height: 100vh; |
||||
|
} |
||||
|
|
||||
|
#app { |
||||
|
width: 100vw; |
||||
|
height: 100vh; |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
position: relative; |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
|
||||
|
.bg-image { |
||||
|
position: absolute; |
||||
|
top: 0; |
||||
|
left: 0; |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
object-fit: cover; |
||||
|
z-index: -1; |
||||
|
} |
||||
|
|
||||
|
.header { |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
padding: 15px 20px; |
||||
|
width: 100%; |
||||
|
z-index: 10; |
||||
|
} |
||||
|
|
||||
|
.expire-time { |
||||
|
font-size: 14px; |
||||
|
background: rgba(0, 0, 0, 0.3); |
||||
|
padding: 6px 12px; |
||||
|
border-radius: 15px; |
||||
|
backdrop-filter: blur(5px); |
||||
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); |
||||
|
} |
||||
|
|
||||
|
.icons { |
||||
|
display: flex; |
||||
|
gap: 15px; |
||||
|
} |
||||
|
|
||||
|
.icon-btn { |
||||
|
width: 30px; |
||||
|
height: 30px; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
background: rgba(255, 215, 0, 0.8); |
||||
|
border-radius: 50%; |
||||
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3); |
||||
|
} |
||||
|
|
||||
|
.icon-btn img { |
||||
|
width: 18px; |
||||
|
height: 18px; |
||||
|
} |
||||
|
|
||||
|
.title-image { |
||||
|
width: 80%; |
||||
|
max-width: 300px; |
||||
|
margin: 10px auto 0; |
||||
|
z-index: 5; |
||||
|
} |
||||
|
|
||||
|
.wheel-container { |
||||
|
position: relative; |
||||
|
width: 100%; |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
flex-direction: column; |
||||
|
margin-top: 10px; |
||||
|
z-index: 5; |
||||
|
} |
||||
|
|
||||
|
.wheel { |
||||
|
width: 300px; |
||||
|
height: 300px; |
||||
|
position: relative; |
||||
|
transition: transform 4s cubic-bezier(0.17, 0.67, 0.21, 0.99); |
||||
|
} |
||||
|
|
||||
|
.pointer { |
||||
|
position: absolute; |
||||
|
top: -15px; |
||||
|
left: 50%; |
||||
|
transform: translateX(-50%); |
||||
|
width: 40px; |
||||
|
height: 60px; |
||||
|
z-index: 20; |
||||
|
} |
||||
|
|
||||
|
.pointer-cover { |
||||
|
position: absolute; |
||||
|
top: -40px; |
||||
|
left: 50%; |
||||
|
transform: translateX(-50%); |
||||
|
width: 60px; |
||||
|
height: 60px; |
||||
|
z-index: 25; |
||||
|
} |
||||
|
|
||||
|
.bottom-section { |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
align-items: center; |
||||
|
margin-top: 30px; |
||||
|
width: 100%; |
||||
|
z-index: 5; |
||||
|
} |
||||
|
|
||||
|
.popup-image { |
||||
|
width: 90%; |
||||
|
max-width: 320px; |
||||
|
margin-bottom: 20px; |
||||
|
} |
||||
|
|
||||
|
.spin-button { |
||||
|
width: 180px; |
||||
|
height: 60px; |
||||
|
background: linear-gradient(135deg, #FFD700 0%, #FFA500 100%); |
||||
|
border: none; |
||||
|
border-radius: 30px; |
||||
|
color: #8B4513; |
||||
|
font-size: 20px; |
||||
|
font-weight: bold; |
||||
|
box-shadow: 0 4px 15px rgba(255, 215, 0, 0.5); |
||||
|
cursor: pointer; |
||||
|
margin-bottom: 30px; |
||||
|
transition: all 0.3s; |
||||
|
} |
||||
|
|
||||
|
.spin-button:active { |
||||
|
transform: scale(0.95); |
||||
|
box-shadow: 0 2px 8px rgba(255, 215, 0, 0.4); |
||||
|
} |
||||
|
|
||||
|
.prize-popup { |
||||
|
position: fixed; |
||||
|
top: 0; |
||||
|
left: 0; |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
background: rgba(0, 0, 0, 0.8); |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
z-index: 100; |
||||
|
opacity: 0; |
||||
|
pointer-events: none; |
||||
|
transition: opacity 0.5s; |
||||
|
} |
||||
|
|
||||
|
.prize-popup.active { |
||||
|
opacity: 1; |
||||
|
pointer-events: all; |
||||
|
} |
||||
|
|
||||
|
.popup-content { |
||||
|
background: linear-gradient(135deg, #f6d365 0%, #fda085 100%); |
||||
|
width: 80%; |
||||
|
max-width: 300px; |
||||
|
border-radius: 20px; |
||||
|
padding: 30px; |
||||
|
text-align: center; |
||||
|
box-shadow: 0 5px 25px rgba(0, 0, 0, 0.5); |
||||
|
position: relative; |
||||
|
} |
||||
|
|
||||
|
.close-popup { |
||||
|
position: absolute; |
||||
|
top: 10px; |
||||
|
right: 15px; |
||||
|
font-size: 24px; |
||||
|
color: #8B4513; |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
|
||||
|
.prize-title { |
||||
|
color: #8B4513; |
||||
|
font-size: 22px; |
||||
|
margin-bottom: 15px; |
||||
|
} |
||||
|
|
||||
|
.prize-desc { |
||||
|
color: #8B4513; |
||||
|
font-size: 16px; |
||||
|
margin-bottom: 20px; |
||||
|
} |
||||
|
|
||||
|
.claim-btn { |
||||
|
background: #8B4513; |
||||
|
color: #FFD700; |
||||
|
border: none; |
||||
|
padding: 10px 25px; |
||||
|
border-radius: 20px; |
||||
|
font-size: 16px; |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
|
||||
|
@media (max-height: 700px) { |
||||
|
.wheel { |
||||
|
width: 250px; |
||||
|
height: 250px; |
||||
|
} |
||||
|
|
||||
|
.title-image { |
||||
|
max-width: 250px; |
||||
|
} |
||||
|
|
||||
|
.spin-button { |
||||
|
width: 160px; |
||||
|
height: 50px; |
||||
|
font-size: 18px; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@media (max-height: 600px) { |
||||
|
.wheel { |
||||
|
width: 220px; |
||||
|
height: 220px; |
||||
|
} |
||||
|
|
||||
|
.title-image { |
||||
|
max-width: 220px; |
||||
|
} |
||||
|
|
||||
|
.spin-button { |
||||
|
width: 140px; |
||||
|
height: 45px; |
||||
|
font-size: 16px; |
||||
|
} |
||||
|
} |
||||
|
</style> |