js导航栏点击变色

在写导航条时总会遇到点击当前li变色,同级兄弟li无变化这个问题,困扰了我很久。具体思路如下:

1.html+css

<ul>
    <li>首页</li>
    <li>服务</li>
    <li>案例</li>
    <li>客户</li>
    <li>动态</li>
    <li>口碑</li>
    <li>关于</li>
    <li>联系</li>
</ul>
ul {
    width: 800px;
    height: 50px;
    list-style: none;
}
ul li {
    width: 10%;
    height: 100%;
    float: left;
    margin-left: 1%;
    background: cadetblue;
    font-size: 20px;
    text-align: center;
    line-height: 2;
}

2.主要js

//获取每个li
var lis = document.querySelectorAll("ul li");

window.onload = function() {
    //循环每个li
    for (var i = 0; i < lis.length; i++) {
        //每个li点击事件
        lis[i].onclick = function() {
            //再循环一遍li
            for (var j = 0; j < lis.length; j++) {
                //先把所有li的颜色变为黑色(或者清空);
                lis[j].style.color = "black";
            }
            //当前点击的li颜色改变
            this.style.color = "red";
        }
    }
}

效果显示:

在React中实现导航栏点击选中变色通常涉及到状态管理以及CSS样式的动态应用。以下是实现这一功能的基本步骤: 1. 状态定义:首先,你需要在React组件的状态中定义一个变量来跟踪当前选中的导航项。 2. 事件处理:为每个导航链接添加一个点击事件处理器,在该处理器中更新状态变量为当前点击导航项。 3. 条件渲染:根据状态变量的值,使用条件渲染技术来决定哪个导航项处于选中状态。 4. CSS应用:使用CSS样式来定义选中状态下的样式,比如改变背景色、文本颜色等。通常可以通过内联样式或者类名来实现。 下面是一个简单的示例代码: ```jsx import React, { useState } from 'react'; import './Navbar.css'; // 引入样式文件 const Navbar = () => { const [selected, setSelected] = useState('home'); // 默认选中'home' const handleNavClick = (navItem) => { setSelected(navItem); // 更新选中的导航项状态 }; return ( <nav> <ul> <li className={selected === 'home' ? 'selected' : ''} onClick={() => handleNavClick('home')} > 首页 </li> <li className={selected === 'about' ? 'selected' : ''} onClick={() => handleNavClick('about')} > 关于 </li> <li className={selected === 'contact' ? 'selected' : ''} onClick={() => handleNavClick('contact')} > 联系 </li> </ul> </nav> ); }; export default Navbar; ``` 在上面的代码中,我们使用了简单的JavaScript逻辑来切换类名。`Navbar.css` 文件中可能包含如下样式: ```css .selected { color: white; background-color: blue; } ``` 在这个例子中,当对应的导航项被点击时,它会获得一个 'selected' 类,从而改变其样式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值