目标:点击“正在播出”css样式就到了它身上,而“即将上映”没有样式;同样当点击“即将上映”样式就转换到它这里来了
重点思路:给两个标签都绑上点击事件,先将class选择器选择的属性写好,然后通过classList给标签增加这个类名或者移除这个类名来控制。
具体的代码思路是:先写好class选择器样式:见“.active{}”,然后第一个li标签点击事件要执行的代码是:当点击“正在播出”,它增加“active”这个类名,赋予属性,然后移除另一个item2的“active”属性;当点击item2时,给item2增加“active”属性,删除item1的“active”属性。
核心代码:画红圈的那个

完整代码:
- DOCTYPE html>
-
-
-
-
Document -
- *{
- margin: 0%;
- padding: 0%;
- }
- ul{
- list-style: none;
- display: flex;
- }
- li{
- height: 50px;
- line-height: 50px;
- text-align: center;
- flex: 1;
- }
- .active{
- color: red;
- border-bottom: 1px solid red;
- }
-
-
-
- 正在播出
-
- 即将上映
-
-
- item1.onclick = function(){
- item1.classList.add("active")
- item2.classList.remove("active")
- }
- item2.onclick = function(){
- item2.classList.add("active")
- item1.classList.remove("active")
- }
-
效果:

目标:制作像QQ那样,点击“首页”就会首页出现样式而且跳转到首页,点击“我的”就会跳转我的那个界面
代码:
- DOCTYPE html>
-
-
-
-
Document -
- *{
- margin: 0%;
- padding: 0%;
- }
- ul{
- list-style: none;
- }
- .header{
- display: flex;
- width: 500px;
- }
- .header li{
- flex: 1;
- height: 50px;
- line-height: 50px;
- text-align: center;
- border: 1px solid black;
- }
- .box{
- position: relative;
- }
- .box li{
- position: absolute;
- left: 0%;
- top: 0%;
- width: 500px;
- height: 200px;
- background-color: aquamarine;
- /* 都隐藏显示 */
- display: none;
- }
- .header .active{
- background-color: red;
- }
- .box .active{
- display: block;
- }
-
-
-
-
- 1
-
- 2
-
- 3
-
- 4
-
-
-
- 111
-
- 222
-
- 333
-
- 444
-
-
- var oHeaderItems = document.querySelectorAll(".header li")
- var oBoxItems = document.querySelectorAll(".box li")
- for(var i=0;i
- //点击之前给li标签加上自定义属性,方便知道点击的是哪一个标签事件
- oHeaderItems[i].dataset.index = i
- oHeaderItems[i].onclick = handler
-
- }
-
- function handler(){
- // console.log(i)//大坑
- //this:拿到当前的对象,这样我们点击哪一个标签就知道当前标签是第几个了
- // console.log(this.dataset.index)
- var index = this.dataset.index
- //移除所有标签身上的active属性
- for(var m=0;m
- oHeaderItems[m].classList.remove("active")
- oBoxItems[m].classList.remove("active")
- }
- oHeaderItems[index].classList.add("active")
- oBoxItems[index].classList.add("active")
- }
-
效果:在观察上面的“1 2 3 4”时,同时关注下面的青绿色上面文字的变化,随着上面的点击下面也也会跟着变,这就达到了我们想要的效果:点击一个选项,就会转到这个选项页面来,点击下一个选项,就会转到下一个对应的页面上来,例如:QQ的最下面的选项卡“首页、联系人、我的”。

重点思路:先讲第一个ul标签,首先是要获取到标签,然后给选择卡增加点击事件,因为选项卡(指的是header部分的1,2,3,4)比较多,所以我们用for循环的方式给每一个li标签增加点击事件,然后清除其他所有li标签的“active”属性,当点击哪个标签时,给它加上“active”,但是我们不知道当前点击的是哪个标签,所以给这些li标签增加一个自定义属性,就是给他们编号,获取当前属性值用到了:this这个方法,然后用这个方法获取当前点击的是第几个标签,也就是获取这个编号,再给当前这个li标签加上“active”属性。第二个ul标签也就是选项卡下面的页面部分,刚开始设置它们隐藏(display:none;),获取到谁,谁就加上“active”样式显现出来。
代码解析:
1、首先你要操作标签肯定要获取这个标签(li标签),上面就是获取标签的方法

2、循环给第一个ul里面的li标签添加点击事件:onclick;handler函数在下面定义

注意:console.log(i): 这里一定很多人说想知道li标签是第几个,打印一个这个“i”不就可以了吗,错,如果你在这里打印了“i”结果会一直是4,不会说你循环一次打印个1,循环第二次打印个2,原因是这个循环是执行的非常快的,当你还没开始点击呢,这个循环就执行完了,所以最后的结果一定只有4。所以这里我们用给li标签增加自定义属性的方式配合this方法来获取他们的编号。
增加定义属性:

配合this获取当前li标签的序号

接着讲下面页面内容怎么切换的:
和选项卡一个思路,就是将所有的li标签去掉“active”样式,获取到谁谁就呈现出来(刚开始它们都是隐藏的),
想了解:classList:remove()用法的请见:
DOM操作元素类名:“.className”、“classList”的用法_陌一一的博客-CSDN博客
想了解dataset用法的请见:
DOM操作元素属性:setAttribute、getAttribute、removeAttribute、dataset的用法_陌一一的博客-CSDN博客
-
相关阅读:
权重叠加:如果是复合选择器,则会有权重叠加需要计算权重
qdockwidget隐藏标题栏导致无法拖动问题
java计算机毕业设计学生选课系统源码+数据库+系统+lw文档+部署
OpenFeign服务接口调用
CSS动画-Animation
如何理解Spring的IOC和AOP
flink集群部署
Linux安装与配置SSH服务
ECharts海量数据渲染解决卡顿的4种方式
Spring-Kafka系列(3)—— SpringKafka消费者监听MessageListener
-
原文地址:https://blog.csdn.net/a1598452168YY/article/details/127408868