
利用 `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 标记“已进入”,实现跨会话的智能首屏跳转。简洁、安全、零后端依赖,是现代前端欢迎页体验优化的标准实践。