@@ -1443,7 +1471,9 @@ export default function ReaderViewPage() {
draggable={comicDragSinglePage}
stageRef={comicStageRef}
onZone={(zone) => {
- if (zone === 'center') setMenuOpen((v) => !v)
+ if (zone === 'center') centerTap()
+ // 点了左右分区(翻屏)就丢掉待判定的中间单击,别让它在窗口期满时弹菜单。
+ else cancelCenterTap()
}}
initialImage={restorePos}
onProgress={(idx) => {
@@ -1571,6 +1601,7 @@ export default function ReaderViewPage() {
aria-label="上一页"
onClick={() => {
if (consumeSwipe()) return
+ cancelCenterTap()
goPrev()
}}
className="cursor-w-resize"
@@ -1580,7 +1611,8 @@ export default function ReaderViewPage() {
aria-label="菜单"
onClick={() => {
if (consumeSwipe()) return
- setMenuOpen((v) => !v)
+ // 中间单击=菜单、双击=全屏,区分逻辑在 useDoubleTap(桌面端原样单击)。
+ centerTap()
}}
className="cursor-default"
/>
@@ -1589,6 +1621,7 @@ export default function ReaderViewPage() {
aria-label="下一页"
onClick={() => {
if (consumeSwipe()) return
+ cancelCenterTap()
goNext()
}}
className="cursor-e-resize"
@@ -1614,7 +1647,16 @@ export default function ReaderViewPage() {
type="button"
aria-label="关闭菜单"
className="fixed inset-0 z-40 cursor-default bg-black/30"
- onClick={() => setMenuOpen(false)}
+ onClick={(e) => {
+ // 关菜单要立刻生效,不套单击延迟。
+ setMenuOpen(false)
+ // 但若这一下关在中间区域,就顺手开个双击窗口:菜单开着时双击中间
+ // 也能切全屏(第二下落在刚关掉菜单的正文上,见 useDoubleTap.arm)。
+ // 点在左右三分区(本意是翻页)时不开窗口,免得被下一拍误判成双击。
+ const rect = e.currentTarget.getBoundingClientRect()
+ const x = rect.width > 0 ? (e.clientX - rect.left) / rect.width : 0.5
+ if (x >= 0.3 && x <= 0.7) armCenterDoubleTap()
+ }}
/>
{/* 顶栏 */}