feat(me): 优化页面加载和摄像头权限处理逻辑
- 移除enterAnimationMode函数中的APP_STATE.isLoaded检查,确保动画模式始终可进入 - 改进加载屏幕隐藏逻辑,增加DOM存在性检查防止潜在错误 - 根据摄像头状态动态更新UI提示信息 - 增加摄像头权限检查机制,在页面加载时自动检测并启用摄像头 - 实现延迟显示交互模式按钮逻辑,确保页面过渡完成后再显示 - 调整资源加载完成后的进入按钮显示逻辑,移除不必要的条件判断 - 优化倒计时文本显示,支持中英文切换 - 统一页面加载完成后的提示信息更新逻辑
This commit is contained in:
74
me.html
74
me.html
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user