fix(embed): watchdog also clears hover + releases capture (third freeze layer — capture suspends pointerleave, lost release never frees it)
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -235,8 +235,22 @@ function onPointerDown(event: PointerEvent): void {
|
|||||||
pointerWatchdog = setTimeout(() => {
|
pointerWatchdog = setTimeout(() => {
|
||||||
pointerWatchdog = null;
|
pointerWatchdog = null;
|
||||||
pointerDownY = null;
|
pointerDownY = null;
|
||||||
|
// 统一清指针族原因(滚动卡死第三层修复 2026-09-23):pointer capture 挂起
|
||||||
|
// 期间 pointerleave 不派发,而窗外释放使 up 永不送达 iframe → capture 不
|
||||||
|
// 释放 → hover 原因同样永久卡住。看门狗兜底:释放捕获 + 清
|
||||||
|
// pointer/manual/hover 三因(窗内正常路径由各事件自行清理,不受影响)。
|
||||||
|
try {
|
||||||
|
const el = viewportEl.value;
|
||||||
|
if (el !== null && el.hasPointerCapture(event.pointerId)) {
|
||||||
|
el.releasePointerCapture(event.pointerId);
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
/* 指针已不在:忽略 */
|
||||||
|
}
|
||||||
|
hoverPointerIsMouse = false;
|
||||||
setReason('pointer', false);
|
setReason('pointer', false);
|
||||||
setReason('manual', false);
|
setReason('manual', false);
|
||||||
|
setReason('hover', false);
|
||||||
scheduleResume();
|
scheduleResume();
|
||||||
}, POINTER_WATCHDOG_MS);
|
}, POINTER_WATCHDOG_MS);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user