JavaScript插件Tab選項卡效果
閑來無事,研究了一下JavaScript插件的寫法,今天就將自己寫的一個小插件記錄下來。
本文介紹了此款插件的基本用法,實現(xiàn)的功能以及代碼。
首先,來看看最終效果:

這是一款普通的Tab選項卡插件,下面來講講它實現(xiàn)了哪些功能:
1、支持不同鼠標事件觸發(fā)選項卡切換效果;
2、支持不同切換效果的配置,例如淡入淡出/直接切換;
3、支持默認展示第幾個選項卡的配置;
4、支持選項卡的自動切換效果。
例子很簡單,需要用到的知識包括:
1、html、css的基礎知識;
2、對this,prototype,new等關鍵詞的理解。
簡而言之,就是通過參數(shù)配置的形式來完成不同效果的展示。
下面先看一看如何使用:
1、$(".js-tab").etab();
2、$(".js-tab").etab({
triggerType: "click",
effect: "fade",
invoke: 2,
auto: 3000
});
3、Tab.init($(".js-tab"));
本插件支持幾種不同的初始化方式,代碼很簡單,類似于BootStrap插件的使用方法。下面奉上完整的代碼:
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Tab選項卡</title>
<link href="tab.css" rel="stylesheet">
<style>
* {
margin:0;
padding:0;
}
body {
background-color: #323232;
font-size:12px;
font-family:微軟雅黑;
padding:100px;
}
ul, li {
list-style-type: none;
}
</style>
<script src="../lib/jquery-1.11.3.js"></script>
<script type="text/javascript" src="tab.js"></script>
</head>
<body>
<div class="js-tab tab">
<ul class="tab-nav">
<li class="active"><a href="#">新聞</a> </li>
<li><a href="#">電影</a> </li>
<li><a href="#">娛樂</a> </li>
<li><a href="#">科技</a> </li>
</ul>
<div class="content-wrap">
<div class="content-item current">
<h3>新聞</h3>
</div>
<div class="content-item">
<h3>電影</h3>
</div>
<div class="content-item">
<h3>娛樂</h3>
</div>
<div class="content-item">
<h3>科技</h3>
</div>
</div>
</div>
<script>
$(function() {
// Tab.init($(".js-tab"));
$(".js-tab").etab({
triggerType: "click",
effect: "fade",
invoke: 2,
auto: 3000
});
$(".js-tab").etab();
});
</script>
</body>
</html>
.tab {
width: 300px;
}
.tab .tab-nav {
height: 30px;
}
.tab .tab-nav li {
float: left;
margin-right:5px;
background-color:#767676;
border-radius:3px 3px 0 0;
}
.tab .tab-nav li a{
display:block;
height:30px;
padding:0 20px;
color: white;
line-height:30px;
text-decoration: none;
}
.tab .tab-nav .active {
background-color: #fff;
}
.tab .tab-nav .active a{
color: #777;
}
.tab .content-wrap{
background-color: white;
padding:5px;
height:200px
}
.tab .content-wrap .content-item {
position:absolute;
height: 200px;
display: none;
}
.tab .content-wrap .current {
height: 200px;
display: block;
}
最后將插件代碼列出來,在代碼里面已經(jīng)寫了很詳細的注釋:
/**
* Created by Wu.lin on 2017/11/12.
*/
(function($){
var Tab = function(tab, _params) {
var _this = this;
//保存單個Tab組件
this.tab = tab;
this.params = _params;
//默認配置參數(shù)
this.config = {
//用來定義鼠標的出發(fā)類型 "click"/mouseover
"triggerType": "mouseover",
//用來定義內(nèi)容切換效果,直接切換/淡入淡出
"effect": "default",
//默認展示第幾個Tab
"invoke": "1",
//用來定義Tab是否自動切換,當指定了事件間隔,就表示自動切換,并指定了切換間隔
"auto": false
};
//如果配置參數(shù)存在,就擴展默認的配置參數(shù)
if(this.params){
$.extend(this.config, this.params);
}
//保存Tab標簽列表,以及對應的內(nèi)容列表
this.tabItem = this.tab.find("ul.tab-nav li");
this.contentItem = this.tab.find("div.content-wrap .content-item");
//保存配置參數(shù)
var config = this.config;
if(config.triggerType === "click") {
this.tabItem.bind(config.triggerType, function() {
_this.invoke($(this));
});
} else {
this.tabItem.mouseover(function(){
_this.invoke($(this));
});
}
//自動切換功能
if(config.auto) {
this.timmer = null;
//計數(shù)器
this.loop = 0;
this.autoPlay();
this.tab.hover(function() {
window.clearInterval(_this.timmer);
}, function() {
_this.autoPlay();
});
}
//設置默認顯示第幾個Tab
if(config.invoke > 1) {
this.invoke(this.tabItem.eq(config.invoke - 1));
}
};
Tab.prototype = {
//事件驅(qū)動函數(shù)
invoke: function(currentTab) {
/**
* 1、執(zhí)行Tab選中狀態(tài),當前選中Tab加上Active,
* 2、切換對應Tab內(nèi)容,根據(jù)配置參數(shù)effect參數(shù)default|fade
*/
var index = currentTab.index();
var conItem = this.contentItem;
//Tab切換
currentTab.addClass("active").siblings().removeClass("active");
//內(nèi)容區(qū)域切換
var effect = this.config.effect;
if(effect === "fade") {
conItem.eq(index).fadeIn().siblings().fadeOut();
} else {
conItem.eq(index).addClass("current").siblings().removeClass("current");
}
//注意,如果配置了自動切換,記得把當前的loop值設置為當前的Tab的index
if(this.config.auto) {
this.loop = index;
}
},
//自動間隔切換
autoPlay: function() {
var _this_ = this,
tabItems = this.tabItem, //臨時保存Tab列表
tabLength = tabItems.size(),
config = this.config;
this.timmer = window.setInterval(function() {
_this_.loop++;
if(_this_.loop >= tabLength) {
_this_.loop = 0;
}
tabItems.eq(_this_.loop).trigger(config.triggerType);
}, config.auto);
}
};
Tab.init = function(tabs) {
var _this_ = this;
tabs.each(function() {
new _this_($(this));
});
// var tab = new Tab($(".js-tab").eq(0));
};
//注冊成JQuery方法
$.fn.extend({
etab: function(_param) {
this.each(function () {
new Tab($(this), _param);
});
return this;
}
});
window.Tab = Tab;
})(jQuery);
如此看來,是不是很簡單,一起來動手試試吧!
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- JavaScript tab選項卡插件實例代碼
- jquery插件tytabs.jquery.min.js實現(xiàn)漸變TAB選項卡效果
- js實現(xiàn)簡單選項卡功能
- js實現(xiàn)簡單的可切換選項卡效果
- js選項卡的實現(xiàn)方法
- javascript實現(xiàn)tabs選項卡切換效果(自寫原生js)
- JS實現(xiàn)選項卡實例詳解
- 使用vue.js寫一個tab選項卡效果
- Vue.js組件tabs實現(xiàn)選項卡切換效果
- 原生js實現(xiàn)tab選項卡切換
- js實現(xiàn)tab選項卡函數(shù)代碼
- Vue.js組件tab實現(xiàn)選項卡切換
- JS實現(xiàn)選項卡插件的兩種寫法(jQuery和class)
相關文章
javascript實現(xiàn)iframe框架延時加載的方法
這篇文章主要介紹了javascript實現(xiàn)iframe框架延時加載的方法,可基于setTimeout實現(xiàn)這一功能,是非常實用的技巧,需要的朋友可以參考下2014-10-10
JavaScript SHA512&SHA256加密算法詳解
本文給大家分享的是javascript版的SHA512&SHA256加密算法的代碼,以及用法,有需要的小伙伴可以參考下。2015-08-08
JS jQuery使用正則表達式去空字符的簡單實現(xiàn)代碼
本文給大家分享使用正則表達式去空字符的簡單實現(xiàn)方法,需要的朋友參考下2017-05-05
js利用事件的阻止冒泡實現(xiàn)點擊空白模態(tài)框的隱藏
點擊彈出某個框框,但是,有時候不想操作,就想點擊某個空白處,隱藏該框框,關于這一點,下面有個具體的實現(xiàn)2014-01-01
基于javascript html5實現(xiàn)多文件上傳
這篇文章主要為大家詳細介紹了基于javascript html5實現(xiàn)多文件上傳的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-03-03

