
利用 `localstorage` 在首次访问时记录状态,后续加载页面时自动跳过 logo 欢迎屏,实现更流畅的用户体验。无需服务端参与,兼容现代浏览器。
在单页式首页设计中(如带 Logo 入口屏 + 主内容区的两段式布局),用户每次点击导航栏中的“首页”链接都会重新加载 index.html,导致默认回到入口屏——这违背了“已访问即熟悉”的直觉体验。CSS 的 :visited 伪类无法被 JavaScript 读取(出于隐私限制),因此不能用于判断用户是否访问过某个链接;但我们可以用更可靠的方式:持久化记录用户访问状态。
✅ 推荐方案:使用 localStorage
localStorage 是浏览器提供的客户端存储机制,数据长期保存(除非手动清除),且同源页面可共享。我们只需在用户首次完成“进入”操作后写入标记,并在页面加载时检查该标记:
// 页面加载时检查是否已“进入”过
document.addEventListener('DOMContentLoaded', function() {
const hasEntered = localStorage.getItem('hasEnteredHomepage');
if (hasEntered === 'true') {
// 直接显示主内容,隐藏入口屏
document.getElementById('entry-screen').style.display = 'none';
document.getElementById('main-content').style.display = 'block';
} else {
// 显示入口屏(默认状态)
document.getElementById('entry-screen').style.display = 'block';
document.getElementById('main-content').style.display = 'none';
}
});
// “Enter”按钮点击事件
document.getElementById('enter-btn').addEventListener('click', function() {
localStorage.setItem('hasEnteredHomepage', 'true');
document.getElementById('entry-screen').style.display = 'none';
document.getElementById('main-content').style.display = 'block';
});
? HTML 结构示意(需确保 ID 匹配):
Company Logo
Enter
⚠️ 注意事项
- localStorage 值为字符串类型,建议统一使用 ‘true’ / ‘false’ 字面量,避免 JSON.parse() 或布尔转换陷阱;
- 若需支持多设备/多用户场景(如公共电脑),应结合登录态或提供“退出重进”按钮并调用 localStorage.removeItem(‘hasEnteredHomepage’);
- Safari 在无痕模式下可能禁用 localStorage,可添加 try-catch 并降级为内存标记(仅当前会话有效);
- 不要依赖 document.referrer 或 URL 参数模拟,它们易被篡改且不可靠。
✅ 总结
:visited 是纯样式伪类,JavaScript 无法读取其状态——这是浏览器刻意设计的隐私保护机制。真正可行的解法是主动管理用户状态:用 localStorage 标记“已进入”,实现跨会话的智能首屏跳转。简洁、安全、零后端依赖,是现代前端欢迎页体验优化的标准实践。
