使用原生js实现选项卡功能实例教程
选项卡是前端常见的基本功能,它是用多个标签页来区分不同内容,通过选择标签快速切换内容。学习本教程之前,读者需要具备html和css技能,同时需要有简单的javascript基础。
先来完成html部分。首先,需要一个元素把整个选项卡包含在内。新建一个div元素,它的id命名为tabBox,如下所示:
<div id="tabBox"></div>
在tabBox元素里面,再把选项卡分为标签和内容两个部分,分别命名class为label_box和content_box,如下所示:
<div id="tabBox" class="tab_box">
<ul class="label_box"></ul><!--标签部分-->
<div class="content_box"></div><!--内容部分-->
</div>
一般情况下,标签元素和内容元素的数量要保持一致,在本实例中把标签和内容都设为三个。 分别在label_box和content_box元素中添加标签和内容,如下所示:
<div id="tabBox" class="tab_box">
<ul class="label_box"><!--标签部分-->
<li>选项一</li>
<li>选项二</li>
<li>选项三</li>
</ul>
<div class="content_box"><!--内容部分-->
<div class="content">内容一</div>
<div class="content">内容二</div>
<div class="content">内容三</div>
</div>
</div>
为了让选项卡好看一点,读者可以根据自己喜好加上一些样式,也可以直接复制以下样式代码使用:
.tab_box{
width:600px;
margin:30px auto;
}
.label_box{
padding-left:30px;
font-size:;
}
.label_box li{
display:inline-block;
line-height:30px;
height:30px;
padding:0 10px;
margin:0 5px;
font-size:14px;
border:1px solid #2d9aff;
border-bottom:none;
border-top-left-radius:4px;
border-top-right-radius:4px;
cursor:pointer;
}
.label_box li.active{
background:#2d9aff;
color:#fff;
}
.content_box{
padding:20px;
border:1px solid #2d9aff;
border-radius:4px;
box-shadow:0px 0px 6px #aaa;
}
.content_box .content{
display:none;
height:300px;
}
完成html和css部分之后,再来使用js实现标签切换的功能。本实例把选项卡功能封装到函数中,所以先创建一个primaryTab函数,在primaryTab中再来编写具体代码。
笔者建议在完成某一个前端功能时,应先分析功能的具体操作。再根据具体操作把实现功能的方法分成多个步骤,接下来一个步骤一个步骤去完成它。
选项卡的操作非常简单,就是选择标签(可以是点击,也可以是鼠标滑过,本实例使用点击事件)时,快速切换内容且修改当前激活标签样式。默认情况下第一个标签元素为当前激活状态,第一个内容元素需要显示。把这样一个操作,在实现功能上来可分成三个步骤:
1 获取标签元素和内容元素
2 给第一个标签元素添加active样式修改为激活状态;把第一个内容元素通过样式display:bolock来显示。
3 在标签上添加事件,实现切换内容
3.1 遍历标签,给每一个标签添加事件
3.2 在事件函数中遍历标签,把每一个标签的className改为空字符串,用于删除激活标签样式。
3.3 在事件函数中遍历内容元素,把每一个内容元素通过样式设置为隐藏。
3.4 在事件函数中通过this找到当前标签元素,设置className,修改当前标签元素样式为激活状态。
3.5 在事件函数中通过变量找到对应的内容元素,并通过样式设置为显示。
具体代码如下:
function primaryTab(){
//1.获取选项卡外包元素
var eTab = document.getElementById('tabBox');
//1.获取标签外包元素
var eLabel = eTab.getElementsByClassName('label_box')[0];
//1.获取所有标签元素的集合
var aLabels = eLabel.getElementsByTagName('li');
//1.获取内容外包元素
var eContent = eTab.getElementsByClassName('content_box')[0];
//1.获取所有内容元素的集合
var aContents = eContent.getElementsByClassName('content');
//2.给第一个标签元素添加active样式修改为激活状态
aLabels[0].className = 'active';
//2.把第一个内容元素通过样式display:bolock来显示
aContents[0].style.display = 'block';
//3.1 遍历标签,注意:本实例这里声明变量i只能用let,如果用var会出错
for(let i=0;i<aLabels.length;i++){
//3.1 给每一个标签添加点击事件
aLabels[i].onclick = function(){
//3.2 遍历标签
for(let n=0;n<aLabels.length;n++){
//3.2 把每一个标签的className改为空字符串,用于删除激活标签样式。
aLabels[n].className = '';
//3.3 因为标签元素和内容元素数量相同,所以可通过变量n把每一个内容元素通过样式设置为隐藏
aContents[n].style.display = 'none';
}
// 3.4 通过this找到当前标签元素,修改当前标签元素为激活状态。
this.className = 'active';
//3.5 通过变量i找到对应的内容元素,并通过样式设置为显示。
aContents[i].style.display = 'block';
}
}
}
//调用选项卡函数
primaryTab();
好了,就是这么简单,相信通过本教程的学习,你一定很轻松可以掌握JS选项卡功能。
使用原生js实现选项卡功能实例教程的更多相关文章
- 通过模拟数据,使用js在前端实现模糊查询下拉框功能实例教程
所谓模糊查询就是通过关键字在数据中匹配到包含关键字的数据,而得出的查询结果.本实例教程讲解在前端文本框输入关键字,显示匹配的数据列表功能. 首先得准备一个文本框和显示数据列表的div元素,html代码 ...
- 原生js实现分页功能
原生就是实现分页功能 代码如下: var pagination = function(option,fun){ this.parentId = option.id; //容器 this.pageSiz ...
- 原生js拖拽功能制作滑动条实例教程
拖拽属于前端常见的功能,很多效果都会用到js的拖拽功能.滑动条的核心功能也就是使用js拖拽滑块来修改位置.一个完整的滑动条包括 滑动条.滑动痕迹.滑块.文本 等元素,先把html代码写出来,如下所示: ...
- 原生JS实现购物车功能
html <div class="catbox"> <table id="cartTable"> <thead> <t ...
- js实现选项卡功能
1.css .liclick{ border: 1px black solid; background: #fff; float: left; width: 80px; height: 35px; l ...
- 原生js实现选项卡
html代码: <div class="tab"> <ul> <li class="selected">图片</li& ...
- 原生js实现选项卡样式切换的几种方式。
先分享一个不能实现的实例(因为es5没有块作用域) for(var i=0; i<list.length; i++ ) { list[i].onclick = function(){ tabch ...
- 原生 js 录屏功能
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- 用原生 JS 实现双向绑定及应用实例
写在前面: 所谓的双向绑定,无非是从界面的操作能实时反映到数据,数据的变更也能实时展现到界面.angular封装了双向绑定的方法,使双向绑定变得十分简单.但是在有些场景下(比如下面那个场景),不能使用 ...
随机推荐
- c# winform 访问WebServices 服务(通过WEB引用的方式进行访问)
第一步.Winform项目引用WEB服务 第二步.代码声明实例化 Web引用 YzServ.TestServ yzserv = new WebYzServ.TestServ(); yzserv.AAA ...
- (2)Windows PowerShell使用
什么是PowerShell: Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework 的强大功能.PowerShell是命 ...
- SqlBulkCopy批量插入数据 显示 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 smalldatetime。错误
因为需要大量插入数据,linq ef无法达到速度的要求,因此把模型转换成SQL ,使用SqlBulkCopy快速插入.但是去提示 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 s ...
- 欢乐C++ —— 2. 深复制与浅复制
1. 简述 通俗点讲,深复制与浅复制一般对指针而言, 深复制复制指针所指向的内容, 浅复制复制指针的值. 2. 举例 栗子: 当我们有现在有指针A指向一块数据,和指针B. 深复制- ...
- 动态网站项目(Dynamic Web Project)CRUD(增删改查)功能的实现(mvc(五层架构)+jdbc+servlet+tomcat7.0+jdk1.8),前端使用JSP+JSTL+EL组合
代码分享链接 https://pan.baidu.com/s/1UM0grvpttHW9idisiqa6rA 提取码:hx7c 图示 项目结构 1.SelectAllUser ...
- 【MySQL】面试官:谈谈你对Mysql的MVCC的理解?
MVCC(Mutil-Version Concurrency Control),就是多版本并发控制.MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问. 在Mysql的In ...
- Spss统计描述分析
总觉得有些技能学会了是不会忘的,但是还是要记录一下,怕记忆力不像狗皮膏药,并不那么牢固. 1.文件的合并 两个数据文件的合并 点击添加个案,这一步按照自己的需求选择,也可以打开外部数据集,在这里打开的 ...
- 本地缓存Ehcache
1,什么是Ehcache Ehcache是纯java的开源缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider.它主要面向通用缓存.Java EE和轻量级容器, ...
- RPC框架实现(一) Protobuf的rpc实现
概述 RPC框架是云端服务基础框架之一,负责云端服务模块之间的项目调用,类似于本地的函数调用一样方便.常见的RPC框架配带的功能有: 编解码协议.比如protobuf.thrift等等. 服务发现.指 ...
- [HDU2546]饭卡<dp 01背包>
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546 #题目描述: 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前, ...