fix: use class-driven step animation (s0->s1->s2->s0) to avoid inline-style black screen

This commit is contained in:
2026-09-01 20:30:40 +08:00
parent d54e361e81
commit cfb218ba28
+19 -10
View File
@@ -23,7 +23,7 @@
<text class="bubble-text">{{bubbleText}}</text> <text class="bubble-text">{{bubbleText}}</text>
</div> </div>
</div> </div>
<image class="mascot" style="transform: scale({{mascotSX}}, {{mascotSY}})" src="/common/dsniang.png" onclick="onTap" /> <image class="mascot step{{animStep}}" src="/common/dsniang.png" onclick="onTap" />
<text class="peak {{isPeak ? 'peak-red' : 'peak-green'}}">{{peakLabel}}</text> <text class="peak {{isPeak ? 'peak-red' : 'peak-green'}}">{{peakLabel}}</text>
<text class="stats">余额 {{balance}}</text> <text class="stats">余额 {{balance}}</text>
<text class="stats">今日 {{todayTokens}} tokens · 预估 ¥{{todayCost}}</text> <text class="stats">今日 {{todayTokens}} tokens · 预估 ¥{{todayCost}}</text>
@@ -91,8 +91,7 @@ export default {
bubbleVisible: false, bubbleVisible: false,
bubbleText: '', bubbleText: '',
bubbleIndex: 0, bubbleIndex: 0,
mascotSX: 1, animStep: 0,
mascotSY: 1,
settings: { settings: {
serverUrl: 'ws://127.0.0.1:8787', serverUrl: 'ws://127.0.0.1:8787',
userId: '', userId: '',
@@ -150,15 +149,13 @@ export default {
}, },
onTap() { onTap() {
// Q 弹:压扁 -> 回弹过冲 -> 回正(多帧驱动,不依赖 CSS transition) // Q 弹:压扁(s1) -> 回弹过冲(s2) -> 回正(s0),类名驱动
const self = this const self = this
this.mascotSX = 1.00 this.animStep = 1
this.mascotSY = 1.00 setTimeout(() => { self.animStep = 2 }, 60)
setTimeout(() => { self.mascotSX = 1.06; self.mascotSY = 0.84 }, 0) setTimeout(() => { self.animStep = 0 }, 130)
setTimeout(() => { self.mascotSX = 0.98; self.mascotSY = 1.06 }, 60)
setTimeout(() => { self.mascotSX = 1.00; self.mascotSY = 1.00 }, 120)
// 回弹时播鸭叫 // 回弹时播鸭叫
setTimeout(() => { playDuckSound() }, 120) setTimeout(() => { playDuckSound() }, 130)
// 轮播趣味/上轮消耗信息 // 轮播趣味/上轮消耗信息
const idx = this.bubbleIndex % this.bubblePresets.length const idx = this.bubbleIndex % this.bubblePresets.length
@@ -268,6 +265,18 @@ export default {
transition: transform 0.16s cubic-bezier(0.34, 1.56, 0.64, 1); transition: transform 0.16s cubic-bezier(0.34, 1.56, 0.64, 1);
} }
.step0 {
transform: scale(1, 1);
}
.step1 {
transform: scale(1.06, 0.84);
}
.step2 {
transform: scale(0.98, 1.06);
}
.peak { .peak {
font-size: 22px; font-size: 22px;
font-weight: bold; font-weight: bold;