feat(me): 优化页面加载和摄像头权限处理逻辑

- 移除enterAnimationMode函数中的APP_STATE.isLoaded检查,确保动画模式始终可进入
- 改进加载屏幕隐藏逻辑,增加DOM存在性检查防止潜在错误
- 根据摄像头状态动态更新UI提示信息
- 增加摄像头权限检查机制,在页面加载时自动检测并启用摄像头
- 实现延迟显示交互模式按钮逻辑,确保页面过渡完成后再显示
- 调整资源加载完成后的进入按钮显示逻辑,移除不必要的条件判断
- 优化倒计时文本显示,支持中英文切换
- 统一页面加载完成后的提示信息更新逻辑
This commit is contained in:
hehh
2025-12-04 21:41:26 +08:00
parent 5268f35af1
commit fef7ca2288

74
me.html
View File

@@ -912,19 +912,31 @@
// 进入动画模式
function enterAnimationMode() {
if (APP_STATE.isLoaded) return;
// 不再检查APP_STATE.isLoaded状态,确保函数总是执行
APP_STATE.isLoaded = true;
// 隐藏加载屏幕
const loader = DOM_CACHE.startScreen;
loader.style.opacity = 0;
DOM_CACHE.uiLayer.style.opacity = 1;
setTimeout(() => loader.style.display = 'none', 1000);
setTimeout(() => {
if (loader && loader.parentNode) {
loader.style.display = 'none';
}
}, 1000);
// 如果摄像头已启用更新UI以反映交互模式
if (CAMERA_STATE.enabled) {
safeUpdateText(DOM_CACHE.mainHint, CONTENT.hints.main);
safeUpdateText(DOM_CACHE.subHint, CONTENT.hints.sub);
} else {
// 显示交互模式按钮(如果摄像头未启用)
if (!CAMERA_STATE.enabled) {
setTimeout(() => {
if (!CAMERA_STATE.enabled && !DOM_CACHE.interactionModeBtn) {
showInteractionModeButton();
}
}, 1500); // 延迟显示,确保页面已完成过渡
}
}
// 显示交互模式按钮
@@ -1163,9 +1175,46 @@
width: 640, height: 480
});
// 页面加载完成后不自动启动摄像头
// 检查摄像头权限状态(非阻塞方式)
function checkCameraPermissionAndEnable() {
// 使用setTimeout确保不阻塞主流程
setTimeout(async () => {
try {
// 检查是否支持 permissions API
if (navigator.permissions) {
const permission = await navigator.permissions.query({name: 'camera'});
if (permission.state === 'granted') {
// 如果已授权,则启用摄像头
try {
await cameraUtils.start();
CAMERA_STATE.enabled = true;
CAMERA_STATE.permissionDenied = false;
console.log("Camera auto-enabled due to existing permission");
} catch (err) {
console.log("Failed to auto-start camera:", err);
CAMERA_STATE.enabled = false;
CAMERA_STATE.permissionDenied = true;
}
}
}
} catch (err) {
console.log("Unable to check camera permission:", err);
}
}, 0); // 尽快执行,但仍是异步的
}
// 页面加载完成后检查摄像头权限状态
window.addEventListener('load', () => {
console.log("Page loaded, camera not initialized");
console.log("Page loaded, checking camera permission status");
checkCameraPermissionAndEnable();
// 无论摄像头权限如何3.5秒后确保页面加载状态完成
setTimeout(() => {
if (!APP_STATE.isLoaded) {
APP_STATE.isLoaded = true;
console.log("Forced page load completion");
}
}, 3500);
});
window.addEventListener('resize', () => {
@@ -1188,26 +1237,21 @@
}, 800);
// 资源加载完成后显示进入按钮
setTimeout(() => {
if (!APP_STATE.isLoaded) {
// 显示进入选项
DOM_CACHE.enterContainer.style.opacity = '1';
// 开始5秒倒计时
let countdown = 5;
safeUpdateText(DOM_CACHE.countdownHint, `${countdown}秒后自动进入`);
safeUpdateText(DOM_CACHE.countdownHint, `${countdown}${ENV.lang === 'zh' ? '秒后自动进入' : ' seconds to auto-enter'}`);
CAMERA_STATE.countdownInterval = setInterval(() => {
countdown--;
if (countdown > 0) {
safeUpdateText(DOM_CACHE.countdownHint, `${countdown}秒后自动进入`);
safeUpdateText(DOM_CACHE.countdownHint, `${countdown}${ENV.lang === 'zh' ? '秒后自动进入' : ' seconds to auto-enter'}`);
} else {
clearInterval(CAMERA_STATE.countdownInterval);
enterAnimationMode();
enterAnimationMode(); // 确保调用进入动画模式
}
}, 1000);
}
}, 3000);
// 进入按钮事件处理
DOM_CACHE.enterBtn.addEventListener('click', () => {
@@ -1216,11 +1260,7 @@
});
safeUpdateText(DOM_CACHE.mainHint, CONTENT.hints.main);
if (CAMERA_STATE.enabled) {
safeUpdateText(DOM_CACHE.subHint, CONTENT.hints.sub);
} else {
safeUpdateText(DOM_CACHE.subHint, CONTENT.hints.cameraAccessInfo);
}
animate();
</script>