这是一个重点案例,是前端人员的必备技能!!你必须要把这个案例给写会!!!!
案例分析
①Tab栏切换有2个大的模块
②上的模块选项卡,点击某一个,当前这一个底色会是红色,其余不变(排他思想) 修改类名的方式
③下面的模块内容,会跟随上面的选项卡变化。所以下面模块变化写到点击事件里面。
④规律:下面的模块显示内容和上面的选项卡一一对应,相匹配。
⑤核心思路: 给上面的tab_list 里面的所有小li 添加自定义属性,属性值从0开始编号。
(这个案例里面用到了自定义属性!!!!!!!!!!!!!!)
⑥ 当我们点击tab_list 里面的某个小li,让tab_con 里面对应序号的 内容显示,其余隐藏(排他思想)
<script>
var tab_list = document.querySelector('.tab_list');
var lis = tab_list.querySelectorAll('li');
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 = 'current';
}
}
</script>
这个是做上面的模块所用的样式代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
li {
list-style-type: none;
}
.tab {
/*这个是最大的盒子*/
width: 978px;
margin: 100px auto;
}
/*大盒子里的上盒子*/
.tab_list {
/*没给宽,默认和父亲一样宽*/
height: 39px;
border: 1px solid #ccc;
background-color: #f1f1f1;
}
.tab_list li {
float: left;
height: 39px;
line-height: 39px;
padding: 0 20px;
text-align: center;
cursor: pointer;
}
.tab_list .current {
background-color: #c81623;
color: #fff;
}
.item {
/*也不保留位置*/
display: none;
}
</style>
</head>
<body>
<!--大盒子叫tab,里面有上下2个盒子,一个叫tab_list,一个叫tab_con-->
<!--tab_list里面有5个li-->
<!--tab_con里面有5个div-->
<!--5个li和5个div是一一对应的关系-->
<div class="tab">
<div class="tab_list">
<ul>
<li class="current">商品介绍</li>
<li>规格与包装</li>
<li>售后保障</li>
<li>商品评价(50000)</li>
<li>手机社区</li>
</ul>
</div>
<div class="tab_con">
<!-- block除了有转为块级元素以外,还有显示的意思 -->
<!-- 行内元素层级高,把上面的display:none给覆盖了 -->
<div class="item" style="display: block;">
商品介绍模块内容
</div>
<div class="item">
规格与包装模块内容
</div>
<div class="item">
售后保障模块内容
</div>
<div class="item">
商品评价(50000)模块内容
</div>
<div class="item">
手机社区模块内容
</div>
</div>
</div>
<script>
//1. 上的模块选项卡:点击某一个,当前这一个底色会是红色,其余不变(排他思想) 修改类名的方式
// 获取元素
var tab_list = document.querySelector('.tab_list');
/*5个li对应的是5个item*/
var lis = tab_list.querySelectorAll('li');
var items = document.querySelectorAll('.item');
//里面有5个小li,必定要用循环
//for循环绑定点击事件
for(var i = 0; i < lis.length; i++){
//开始给5个小li设置一个自定义属性:索引号index
lis[i].setAttribute('index',i)
//所有的孩子都要有onclick绑定事件
lis[i].onclick = function(){
//排他思想:干掉所有人,其余的li清除class这个类
for(var i = 0; i < lis.length; i++){
lis[i].className = '';
}
//留下我自己
this.className = 'current';
//2.下面的显示内容模块
//得到当前的属性的值
var index = this.getAttribute('index');
// console.log(index);
//再用一次排他思想:干掉所有人,让其余的item 这些div隐藏
for(var j = 0; j < items.length; j++){
items[j].style.display = 'none';
}
//留下我自己 让对应的item显示出来
items[index].style.display = 'block';
}
}
</script>
</body>
</html>
这个是2个模块都完成的最终代码。(这个我独立写我也写不出来)
本文向大家介绍原生javascript实现Tab选项卡切换功能,包括了原生javascript实现Tab选项卡切换功能的使用技巧和注意事项,需要的朋友参考一下 分析个人用原生JS获取类名元素的代码: parent参数是可选的,但需要先判断它是否存在,且是节点dom元素 parent != undefined&&parent.nodeType==1 ,nodeType == 1可以判断节点是否为
本文向大家介绍说说 Dubbo 的实现原理相关面试题,主要包含被问及说说 Dubbo 的实现原理时的应答技巧和注意事项,需要的朋友参考一下 dubbo 作为 rpc 框架,实现的效果就是调用远程的方法就像在本地调用一样。如何做到呢?就是本地有对远程方法的描述,包括方法名、参数、返回值,在 dubbo 中是远程和本地使用同样的接口;然后呢,要有对网络通信的封装,要对调用方来说通信细节是完全不可见的,
本文向大家介绍说说 RPC 的实现原理相关面试题,主要包含被问及说说 RPC 的实现原理时的应答技巧和注意事项,需要的朋友参考一下 首先需要有处理网络连接通讯的模块,负责连接建立、管理和消息的传输。其次需要有编解码的模块,因为网络通讯都是传输的字节码,需要将我们使用的对象序列化和反序列化。剩下的就是客户端和服务器端的部分,服务器端暴露要开放的服务接口,客户调用服务接口的一个代理实现,这个代理实现负
本文向大家介绍原生js实现对Ajax的封装(仿jquery),包括了原生js实现对Ajax的封装(仿jquery)的使用技巧和注意事项,需要的朋友参考一下 前言 众所周知,jquery在我们日常开发中的使用频率非常高,与js相比,我们省去了冗长的获取元素的代码,不用考虑一些麻烦的兼容问题,更加方便的动画实现,以及更加方便的方法调用让我们觉得jquery真是越用越舒服。但是jquery说到底还是对j
本文向大家介绍js实现tab选项卡切换功能,包括了js实现tab选项卡切换功能的使用技巧和注意事项,需要的朋友参考一下 话不多说,请看代码: 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!
本文向大家介绍原生javascript实现的ajax异步封装功能示例,包括了原生javascript实现的ajax异步封装功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了原生javascript实现的ajax异步封装功能。分享给大家供大家参考,具体如下: 更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript中ajax操作技巧总结》、《JavaScr