就像QQ音乐中左边的总目录。点击第一个li时改变颜色 后面再点击第二个li时改变背景颜色 第一个颜色恢复默认 本人小白 可能描述的不到位 求大佬哥哥们解答
<div>
<li class="m-li" id="4" onclick='addColor(this.id)'>
会议简介
</li>
<li class="m-li" id="5" onclick='addColor(this.id)'>
会议议程
</li>
<li class="m-li" id="6" onclick='addColor(this.id)'>
会议嘉宾
</li>
</div>
.personal {
color: #3A99FF;
}
function addColor(x)
{
let list=document.getElementsByTagName('li')
for(let p=list.length;p--;){
if(list[p].id!=x){
list[p].classList.remove("personal");
}
else {
/*点击的*/
list[p].classList.add("personal");
}
}
}
点击时,只给 挡前点击的加 类名,其它都移除
代码可能不完善,先讲下思路吧,大致就是给所有可点击的li元素绑定了点击事件,点击这些li时将所有li的样式重置成默认状态,并且给当前点击的li重新绑定选中样式
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>demo</title>
<style>
.nav {
padding: 0;
margin: 0;
list-style: none;
}
.nav li {
position: relative;
height: 40px;
padding: 0 10px;
box-sizing: border-box;
color: #333333;
line-height: 40px;
cursor: pointer;
}
.nav li:hover {
color: #ffffff;
background-color: #8ad2f3;
}
.nav li.selected {
color: #ffffff;
background-color: #8ad2f3;
}
</style>
</head>
<body>
<ul class="nav">
<li class="selected">喝当季草莓</li>
<li>喝招牌葡萄</li>
<li>喝鲜奶茶</li>
</ul>
<script>
const navList = document.querySelectorAll(".nav li");
navList.forEach(el => {
el.addEventListener("click", () => {
navList.forEach(el => {
el.classList.remove("selected")
})
el.classList.add("selected");
})
})
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
li {
list-style: none;
}
li:hover {
background-color: #eee;
}
li.active {
background-color: teal;
color: #fff;
}
</style>
</head>
<body>
<ul id="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<script>
var lis = document.getElementsByTagName('li')
console.log(lis)
for (var i = 0; i < lis.length; i++) {
lis[i].onclick = function() {
for (var j = 0; j < lis.length; j++) {
lis[j].className = ''
}
this.className = 'active'
}
}
</script>
</body>
</html>
如果用vue写下图直接照抄就行了,其中liList是你要渲染的li标签的数据的列表,currentIndex表示当前所在数据下表,然后在style里写出active的样式就行,如果是原生就麻烦一下,但是原理一样