<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dating with me~</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "PingFang SC", "Microsoft YaHei", sans-serif;
}
body {
min-height: 100vh;
background: linear-gradient(135deg, #fce8ef, #f5f0f8);
display: flex;
align-items: center;
justify-content: center;
padding: 20px;
position: relative;
overflow-x: hidden;
}
/* 散落装饰小花 */
.flower {
position: absolute;
color: #ff66b2;
font-size: 22px;
animation: float 4s ease-in-out infinite;
z-index: 0;
}
@keyframes float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-10px); }
}
/* 主卡片容器 */
.main-card {
width: min(85vw, 720px);
background: #fff;
border: 4px solid #000;
border-radius: 32px;
padding: 40px 30px;
box-shadow: 8px 8px 0 #000;
position: relative;
z-index: 1;
}
/* 页面切换控制 */
.page {
display: none;
animation: fadeUp 0.5s ease;
}
.page.active {
display: block;
}
@keyframes fadeUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* 头像样式 */
.avatar-box {
width: 140px;
height: 140px;
margin: 0 auto 24px;
border-radius: 24px;
border: 4px solid #ff66b2;
padding: 6px;
background: #fff;
overflow: hidden;
}
.avatar-box img {
width: 100%;
height: 100%;
border-radius: 18px;
object-fit: cover;
}
h1 {
font-size: 42px;
font-weight: 900;
text-align: center;
line-height: 1.2;
margin-bottom: 12px;
}
/* 标题两侧大花样式 */
.title-flower{
font-size:52px;
color:#ff77bb;
vertical-align:middle;
margin:0 8px;
}
.tip-text {
text-align: center;
color: #555;
font-size: 16px;
margin-bottom: 36px;
}
/* 按钮组通用样式 */
.btn-group {
display: flex;
gap: 24px;
justify-content: center;
flex-wrap: wrap;
position: relative;
min-height: 80px;
}
.btn {
padding: 14px 48px;
border-radius: 50px;
border: 3px solid #000;
font-size: 20px;
font-weight: bold;
cursor: pointer;
box-shadow: 4px 4px 0 #000;
transition: all 0.2s ease;
}
.btn:active {
transform: translate(2px, 2px);
box-shadow: 2px 2px 0 #000;
}
.btn-primary {
background: #ff33aa;
color: #fff;
}
.btn-secondary {
background: #fff;
color: #000;
position: relative;
user-select: none;
}
/* 表单输入框/下拉框 */
.input-item {
width: 100%;
margin: 18px 0;
}
.input-item label {
display: block;
margin-bottom: 8px;
font-size: 18px;
}
.input-item input,
.input-item select {
width: 100%;
padding: 16px 20px;
border: 3px solid #000;
border-radius: 18px;
font-size: 18px;
box-shadow: 4px 4px 0 #000;
background: #fff;
}
/* 美食九宫格 */
.food-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
margin-top: 30px;
}
.food-item {
border: 3px solid #000;
border-radius: 18px;
padding: 20px 10px;
text-align: center;
box-shadow: 4px 4px 0 #000;
cursor: pointer;
transition: 0.2s;
background: #fff;
}
.food-item:hover {
transform: scale(1.05);
background: #ffe8f4;
}
.food-item .emoji {
font-size: 32px;
margin-bottom: 8px;
}
/* 结果信息卡片 */
.info-box {
border: 3px solid #000;
border-radius: 20px;
padding: 24px;
margin: 24px 0;
box-shadow: 6px 6px 0 #000;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
}
.info-cell {
padding: 12px;
border: 2px solid #000;
border-radius: 14px;
background: #fff;
}
.info-cell small {
color: #ff33aa;
font-weight: bold;
}
.heart-row {
display: flex;
justify-content: center;
gap: 10px;
margin-top: 20px;
color: #ff33aa;
font-size: 22px;
}
</style>
</head>
<body>
<!-- 装饰小花 -->
<div class="flower" style="top: 10%; left: 50%;">🌸</div>
<div class="flower" style="top: 80%; left: 10%;">🌸</div>
<div class="flower" style="top: 85%; right: 8%;">🌸</div>
<div class="main-card">
<!-- 页面1:初始邀约页 → 本地12.jpg -->
<div class="page page1 active">
<div class="avatar-box">
<img src="12.jpg" alt="戳手手小黄脸表情包">
</div>
<h1><span class="title-flower">🌼</span>可以和我一起约会嘛?!<span class="title-flower">🌼</span></h1>
<p class="tip-text">系统检测到:对方已经紧张到开始写网页了。</p>
<div class="btn-group">
<button class="btn btn-primary" id="btn-yes">愿意 ❤</button>
<button class="btn btn-secondary" id="btn-no">不要 💡</button>
</div>
</div>
<!-- 页面5:惊喜反差页 -->
<div class="page page5">
<div style="width: 100px; height: 100px; margin: 0 auto 24px; background: #ed3333; border-radius: 20px; border: 3px solid #000; display: flex; align-items: center; justify-content: center; font-size: 45px;">🥜</div>
<h1>等下,你真的点了愿意??😭</h1>
<p class="tip-text">我都已经准备好被你点“不要”了。</p>
<div class="btn-group">
<button class="btn btn-primary" id="btn-next-time">好啦好啦 →</button>
</div>
</div>
<!-- 页面4:选择时间页 -->
<div class="page page4">
<div style="width: 110px; height: 110px; margin: 0 auto 24px; background: #ff33aa; border-radius: 20px; border: 3px solid #000; display: flex; align-items: center; justify-content: center; font-size: 45px;">📅</div>
<h1>所以...你什么时候有空?😊</h1>
<div class="input-item">
<label>选一天 📅</label>
<input type="date" id="date-select">
</div>
<div class="input-item">
<label>几点见?⏰</label>
<select id="time-select">
<option value="">选择时间...</option>
<option value="12:00">12:00</option>
<option value="12:30">12:30</option>
<option value="13:00">13:00</option>
<option value="13:30">13:30</option>
<option value="14:00">14:00</option>
<option value="14:30">14:30</option>
<option value="15:00">15:00</option>
<option value="15:30">15:30</option>
<option value="16:00">16:00</option>
<option value="16:30">16:30</option>
<option value="17:00">17:00</option>
<option value="17:30">17:30</option>
<option value="18:00">18:00</option>
<option value="18:30">18:30</option>
<option value="19:00">19:00</option>
<option value="19:30">19:30</option>
<option value="20:00">20:00</option>
</select>
</div>
<div class="btn-group">
<button class="btn btn-primary" id="btn-confirm-time">确定时间 ❤</button>
</div>
</div>
<!-- 页面3:选择美食页 -->
<div class="page page3">
<h1>我们吃点什么?🍽️✨</h1>
<p class="tip-text">挑一个今天的约会氛围。</p>
<div class="food-grid">
<div class="food-item" data-food="披萨"><div class="emoji">🍕</div>披萨</div>
<div class="food-item" data-food="寿司"><div class="emoji">🍣</div>寿司</div>
<div class="food-item" data-food="火锅"><div class="emoji">🍲</div>火锅</div>
<div class="food-item" data-food="烤肉"><div class="emoji">🥩</div>烤肉</div>
<div class="food-item" data-food="早茶"><div class="emoji">🥟</div>早茶</div>
<div class="food-item" data-food="拉面"><div class="emoji">🍜</div>拉面</div>
<div class="food-item" data-food="麻辣烫"><div class="emoji">🌶️</div>麻辣烫</div>
<div class="food-item" data-food="小龙虾"><div class="emoji">🦞</div>小龙虾</div>
<div class="food-item" data-food="烧烤"><div class="emoji">🍡</div>烧烤</div>
<div class="food-item" data-food="其他"><div class="emoji">🍳</div>其他</div>
</div>
</div>
<!-- 页面2:最终约会结果页 → 本地13.jpg -->
<div class="page page2">
<div class="avatar-box">
<img src="13.jpg" alt="小刘鸭比心表情包">
</div>
<h1>真开心你没有拒绝~我会准时来接你!</h1>
<p class="tip-text" id="result-desc">我们去吃好吃的,带好胃口,我带好路线。</p>
<div class="info-box">
<div class="info-cell"><small>DATE</small><p id="res-date"></p></div>
<div class="info-cell"><small>TIME</small><p id="res-time"></p></div>
<div class="info-cell"><small>MENU</small><p id="res-food"></p></div>
</div>
<div class="heart-row">❤️❤️❤️❤️❤️</div>
</div>
</div>
<script>
// 全局存储选中信息
let selectDate = '';
let selectTime = '';
let selectFood = '';
const page1 = document.querySelector('.page1');
const page2 = document.querySelector('.page2');
const page3 = document.querySelector('.page3');
const page4 = document.querySelector('.page4');
const page5 = document.querySelector('.page5');
const btnYes = document.getElementById('btn-yes');
const btnNo = document.getElementById('btn-no');
const btnNextTime = document.getElementById('btn-next-time');
const btnConfirmTime = document.getElementById('btn-confirm-time');
const dateSelect = document.getElementById('date-select');
const timeSelect = document.getElementById('time-select');
const foodItems = document.querySelectorAll('.food-item');
// 拒绝按钮4阶段循环文案
const noButtonTexts = [
"不要 💡",
"再想想 🤔",
"点不到吧 🫵",
"不要碰 😤"
];
let noButtonStage = 0;
let hoverCount = 0;
// 切换页面工具函数
function switchPage(nowPage, targetPage) {
nowPage.classList.remove('active');
targetPage.classList.add('active');
}
// 阻止拒绝按钮点击
btnNo.addEventListener('click', e => {
e.preventDefault();
e.stopPropagation();
return false;
});
// 拒绝按钮鼠标悬浮躲避 + 阶段切换
btnNo.addEventListener('mouseenter', () => {
hoverCount++;
noButtonStage = (noButtonStage + 1) % noButtonTexts.length;
btnNo.innerText = noButtonTexts[noButtonStage];
const distanceFactor = Math.min(hoverCount, 6);
const maxX = window.innerWidth - btnNo.offsetWidth - 100;
const maxY = window.innerHeight - btnNo.offsetHeight - 100;
const randomX = (Math.random() - 0.5) * maxX * distanceFactor * 0.45;
const randomY = (Math.random() - 0.5) * maxY * distanceFactor * 0.45;
btnNo.style.transform = `translate(${randomX}px, ${randomY}px)`;
btnNo.style.transition = 'transform 0.35s ease-out';
// 抖动效果
btnNo.animate(
[
{ transform: `translate(${randomX}px, ${randomY}px) rotate(0deg)` },
{ transform: `translate(${randomX}px, ${randomY}px) rotate(-3deg)` },
{ transform: `translate(${randomX}px, ${randomY}px) rotate(3deg)` },
{ transform: `translate(${randomX}px, ${randomY}px) rotate(0deg)` }
],
{
duration: 300,
easing: 'ease-in-out'
}
);
});
// 鼠标离开后按钮复位
btnNo.addEventListener('mouseleave', () => {
setTimeout(() => {
btnNo.style.transform = 'translate(0, 0)';
btnNo.style.transition = 'transform 0.4s ease';
}, 600);
});
// 愿意按钮跳转反差页
btnYes.addEventListener('click', () => {
switchPage(page1, page5);
});
// 反差页进入选时间页
btnNextTime.addEventListener('click', () => {
switchPage(page5, page4);
});
// 确认时间进入选美食页(校验下拉时间)
btnConfirmTime.addEventListener('click', () => {
selectDate = dateSelect.value;
selectTime = timeSelect.value;
if (!selectDate || !selectTime) {
alert('记得选好日期和时间哦🥰');
return;
}
switchPage(page4, page3);
});
// 选中美食进入结果页并回填数据
foodItems.forEach(item => {
item.addEventListener('click', () => {
selectFood = item.dataset.food;
document.getElementById('res-date').innerText = selectDate;
document.getElementById('res-time').innerText = selectTime;
document.getElementById('res-food').innerText = selectFood;
switchPage(page3, page2);
});
});
</script>
</body>
</html>