fix(timer): 完成页圆环覆盖弹窗 + 自定义确认 modal 替代 wx.showModal
训练完成的三个相关 bug: 1. progress-ring 圆环覆盖完成页弹窗 → @tap ring wx:if 让完成态时直接 unmount 2. 完成弹窗内按钮需要点 2 次才能响应 → completion-mask 加 catchtouchmove 拦截 touchmove 3. wx.showModal "结束训练" 系统弹窗在 stacking context 下 hit-test 不稳 根因: .timer-page.page-enter 永久保留 transform: translateY(0), 创建永久 stacking context,影响 native modal 的 WebView 部分 hit-test。 修法: - 新增自定义 stop-confirm modal (catchtouchmove + 内部 catchtap + bindtap), 与 ui-modal/settings.plan-editor-mask 同模式,行为可靠 - completion-mask 用相同模式拦截 touchmove - 顺便修 overtime-badge 暗色 (rgba(var(--success-rgb)))
This commit is contained in:
+20
-8
@@ -25,6 +25,7 @@ Page({
|
||||
confettiPieces: [],
|
||||
// Completion modal (full-screen summary after training ends)
|
||||
showCompletion: false,
|
||||
showStopConfirm: false, // 自定义"结束训练"确认弹窗,替代 wx.showModal
|
||||
completionElapsed: 0,
|
||||
completionTarget: 0,
|
||||
completionOvertime: 0,
|
||||
@@ -260,13 +261,19 @@ Page({
|
||||
},
|
||||
|
||||
onStop() {
|
||||
wx.showModal({
|
||||
title: '结束训练',
|
||||
content: '确定要结束本次训练吗?',
|
||||
success: (res) => {
|
||||
if (res.confirm) this.finishTraining()
|
||||
}
|
||||
})
|
||||
// 用自定义确认弹窗替代 wx.showModal:
|
||||
// 系统原生 modal 在 WebView stacking context 下 hit-test 偶发不稳,
|
||||
// 自定义 modal + catchtouchmove 与现有 completion-mask 同模式,行为更可靠。
|
||||
this.setData({ showStopConfirm: true })
|
||||
},
|
||||
|
||||
onStopCancel() {
|
||||
this.setData({ showStopConfirm: false })
|
||||
},
|
||||
|
||||
onStopConfirm() {
|
||||
this.setData({ showStopConfirm: false })
|
||||
this.finishTraining()
|
||||
},
|
||||
|
||||
finishTraining() {
|
||||
@@ -381,5 +388,10 @@ Page({
|
||||
// Re-init countUp so the big number rolls again on next start
|
||||
_countUpTask: null
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
// No-op handler for catchtouchmove. Swallows move events that would
|
||||
// otherwise bubble to underlying timer page controls (causing missed
|
||||
// taps on the completion modal).
|
||||
onNoop() { /* swallow */ }
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user