feat(fe): 冷启动过渡动画 — 爪印一步步踩上屏幕 + 收尾渐隐
- 启动登录已在 app.js onLaunch + store.ready 单例里最早触发,进首页不再等登录 - 闪屏把原来的单个 logo 换成左右交替的爪印小径,逐个延迟「踩」上屏走向 logo - 登录/拉宠物完成后:先保证闪屏至少 900ms 让爪印走几步,再整屏渐隐放大切走, 不再硬切到首页/建档向导 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -45,6 +45,7 @@ function ageFromBirthday(bdayStr) {
|
||||
Page({
|
||||
data: {
|
||||
booting: true, // 冷启动先显示闪屏,静默登录 + 拉宠物期间不闪建档向导
|
||||
bootOut: false, // 闪屏淡出中:加一层渐隐动画再切走,避免硬切
|
||||
step: 0,
|
||||
petType: '猫猫',
|
||||
petEmoji: '🐱',
|
||||
@@ -68,20 +69,32 @@ Page({
|
||||
submitting: false,
|
||||
},
|
||||
onLoad() {
|
||||
this._bootStart = Date.now();
|
||||
this.setData({ today: today(), arrivedAt: today() });
|
||||
// 闪屏期间就把登录 + 宠物拉完,保证进首页时数据已经到位。
|
||||
// 有宠物直接进首页;没有才落到建档向导。登录失败也别卡在闪屏,
|
||||
// 放用户进向导(提交时会再 store.ready 重试)
|
||||
store
|
||||
.ready()
|
||||
.then(() => {
|
||||
if (store.getPets().length > 0) {
|
||||
.then(() => this._leaveBoot(store.getPets().length > 0 ? 'home' : 'wizard'))
|
||||
.catch(() => this._leaveBoot('wizard'));
|
||||
},
|
||||
// 冷启动闪屏收尾:先保证闪屏至少露够一小会(否则秒开会「闪一下」),
|
||||
// 再加一层渐隐动画,最后才真正切到首页 / 建档向导,避免硬切
|
||||
_leaveBoot(target) {
|
||||
const MIN_MS = 900; // 至少显示这么久,让爪印踩几步走完
|
||||
const FADE_MS = 340; // 与 .boot--out 的 CSS 过渡时长一致
|
||||
const wait = Math.max(0, MIN_MS - (Date.now() - (this._bootStart || 0)));
|
||||
setTimeout(() => {
|
||||
this.setData({ bootOut: true });
|
||||
setTimeout(() => {
|
||||
if (target === 'home') {
|
||||
wx.switchTab({ url: '/pages/home/home' });
|
||||
} else {
|
||||
this.setData({ booting: false });
|
||||
}
|
||||
})
|
||||
.catch(() => this.setData({ booting: false }));
|
||||
}, FADE_MS);
|
||||
}, wait);
|
||||
},
|
||||
nextStep() {
|
||||
this.setData({ step: Math.min(this.data.step + 1, 5) });
|
||||
|
||||
Reference in New Issue
Block a user