You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JavaScript根据登录状态控制导航栏元素的显示与隐藏

登录状态下导航栏元素的显示控制方案

核心逻辑

根据用户登录状态切换指定导航项的可见性:

  • 已登录:显示.nav-item-3,隐藏.nav-item-4
  • 未登录:隐藏.nav-item-3,显示.nav-item-4

原生JavaScript实现方案

基础版(直接控制DOM样式)

// 获取目标导航元素
const navItem3 = document.querySelector('.nav-item-3');
const navItem4 = document.querySelector('.nav-item-4');

// 读取登录状态(实际项目中需替换为真实逻辑:从localStorage、后端接口或全局状态获取)
function getLoginStatus() {
    return localStorage.getItem('isLoggedIn') === 'true';
}

// 根据状态更新导航可见性
function updateNavVisibility() {
    const isLoggedIn = getLoginStatus();
    
    // 注意:这里的display值需匹配导航项默认样式(比如flex/inline-block)
    navItem3.style.display = isLoggedIn ? 'block' : 'none';
    navItem4.style.display = isLoggedIn ? 'none' : 'block';
}

// 页面加载时初始化状态
updateNavVisibility();

// 监听登录/登出操作,实时更新导航
document.querySelector('#login-btn')?.addEventListener('click', () => {
    localStorage.setItem('isLoggedIn', 'true');
    updateNavVisibility();
});

document.querySelector('#logout-btn')?.addEventListener('click', () => {
    localStorage.removeItem('isLoggedIn');
    updateNavVisibility();
});

优化版(用CSS类控制,更灵活)

先在CSS中定义隐藏类:

.hidden {
    display: none !important;
}

再用类操作替代直接修改style:

const navItem3 = document.querySelector('.nav-item-3');
const navItem4 = document.querySelector('.nav-item-4');

function getLoginStatus() {
    return localStorage.getItem('isLoggedIn') === 'true';
}

function updateNavVisibility() {
    const isLoggedIn = getLoginStatus();
    
    // 用toggle方法自动切换类:第二个参数为true时添加类,false时移除
    navItem3.classList.toggle('hidden', !isLoggedIn);
    navItem4.classList.toggle('hidden', isLoggedIn);
}

// 初始化+监听操作
updateNavVisibility();
document.querySelector('#login-btn')?.addEventListener('click', () => {
    localStorage.setItem('isLoggedIn', 'true');
    updateNavVisibility();
});
document.querySelector('#logout-btn')?.addEventListener('click', () => {
    localStorage.removeItem('isLoggedIn');
    updateNavVisibility();
});

框架适配提示(可选)

如果使用React/Vue等框架,可结合框架状态管理实现条件渲染:

  • React示例:
import { useState, useEffect } from 'react';

function Navbar() {
    const [isLoggedIn, setIsLoggedIn] = useState(localStorage.getItem('isLoggedIn') === 'true');

    useEffect(() => {
        localStorage.setItem('isLoggedIn', isLoggedIn);
    }, [isLoggedIn]);

    return (
        <nav>
            {/* 其他导航项 */}
            {isLoggedIn && <div className="nav-item-3">用户中心</div>}
            {!isLoggedIn && <div className="nav-item-4">登录/注册</div>}
        </nav>
    );
}
  • Vue示例:
<template>
    <nav>
        <!-- 其他导航项 -->
        <div class="nav-item-3" v-show="isLoggedIn">用户中心</div>
        <div class="nav-item-4" v-show="!isLoggedIn">登录/注册</div>
    </nav>
</template>

<script>
export default {
    data() {
        return {
            isLoggedIn: localStorage.getItem('isLoggedIn') === 'true'
        }
    },
    watch: {
        isLoggedIn(newVal) {
            localStorage.setItem('isLoggedIn', newVal);
        }
    }
}
</script>

内容的提问来源于stack exchange,提问作者Rumeysa Gelgi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:10:13