js開發(fā)插件實(shí)現(xiàn)tab選項(xiàng)卡效果
本文實(shí)例為大家分享了js插件實(shí)現(xiàn)tab選項(xiàng)卡效果的具體代碼,供大家參考,具體內(nèi)容如下
一、搭建頁面
<div class="tab" data-config='{ // 在標(biāo)簽里自定義配置 "triggerType": "click", "effect": "fade", "invoke": 2, "auto": 1000 }'> <ul class="tab-nav"> <li class="active"><a href="javascript:void(0);" >新聞</a></li> <li><a href="javascript:void(0);" >娛樂</a></li> <li><a href="javascript:void(0);" >電影</a></li> <li><a href="javascript:void(0);" >科技</a></li> </ul> <div class="content"> <div class="content-item current"> <img src="./images/pic1.jpg"> </div> <div class="content-item"> <img src="./images/pic2.jpg"> </div> <div class="content-item"> <img src="./images/pic3.jpg"> </div> <div class="content-item"> <img src="./images/pic4.jpg"> </div> </div> </div>
二、基礎(chǔ)樣式
* { margin: 0; padding: 0; } ul, li { list-style: none; } body { background: #323232; font-size: 12px; padding: 100px; } .tab { width: 300px; } .tab .tab-nav { height: 30px; } .tab .tab-nav li { display: inline-block; margin-right: 5px; background: #767676; border-radius: 3px 3px 0 0; } .tab .tab-nav li a { display: block; text-decoration: none; height: 30px; line-height: 30px; padding: 0 20px; color: #fff; } .tab .tab-nav li.active { background: #fff; color: #777; } .tab .tab-nav li.active a { color: #777; } .tab .content { background: #fff; height: 200px; padding: 5px; } .tab .content-item { position: absolute; display: none; } .tab .content img { width: 290px; height: 200px; } .tab .content .current { display: block; }
三、效果
四、選項(xiàng)卡開發(fā)的思維結(jié)構(gòu)圖:需要對象、參數(shù)、和方法
五、js實(shí)戰(zhàn)
(function () { function Tab (tab) { this.tab = tab; var _this_ = this; // 默認(rèn)配置參數(shù),屬性名為雙引號,不然parseJSON轉(zhuǎn)義不成功 this.config = { // 用來定義鼠標(biāo)的觸發(fā)類型,是click還是mouseover "triggerType": "mouseover", // 用來定義內(nèi)容切換效果,是直接切換,還是淡入淡出效果 "effect": "default", // 默認(rèn)展示第幾個tab "invoke": 1, // 用來定義tab是否自動切換,指定時間為多久切換 "auto": false } // 如果配置存在,就擴(kuò)展掉原來的配置,$.extend合并 if (this.getConfig()) { $.extend(this.config, this.getConfig()); } // 鼠標(biāo)觸發(fā)功能 var config = this.config; // 存儲配置,this.config會每次查找 this.liItem = this.tab.find('.tab-nav li'); // 獲取li this.contentItem = this.tab.find('.content div'); // 獲取內(nèi)容 // 判斷如果是click。。當(dāng)操作時,執(zhí)行invoke方法進(jìn)行切換 if (config.triggerType === 'click') { this.liItem.click(function () { _this_.invoke($(this)); }); } else { this.liItem.mouseover(function () { _this_.invoke($(this)); }); } // 自動切換功能 if (this.config.auto) { this.timer = null; this.count = 0; // 計(jì)數(shù)器 this.autoplay(); // 當(dāng)鼠標(biāo)浮在上面停止,移開時繼續(xù) this.tab.hover(function () { clearInterval(_this_.timer); // 此時的this是this.tab }, function () { _this_.autoplay(); }) } // 默認(rèn)顯示第幾個 if (this.config.invoke > 1) { this.invoke(this.liItem.eq(this.config.invoke - 1)); // 直接切換 } } Tab.prototype = { // 獲取配置參數(shù) getConfig: function () { //把tab元素上的data-config中的內(nèi)容拿出來 var config = this.tab.attr('data-config'); if (config && config != '') { return $.parseJSON(config); // 將json對象轉(zhuǎn)換為js對象 } else { return null; } }, // 獲取傳入的li,進(jìn)行切換 invoke: function (li) { var index = li.index(); // 獲取li的索引 var liItem = this.liItem; var contentItem = this.contentItem; li.addClass('active').siblings().removeClass('active'); // 自身加active其他兄弟都去除 // 淡入淡出還是默認(rèn) var effect = this.config.effect; if (effect === 'default') { contentItem.eq(index).addClass('current').siblings().removeClass('active'); } else { contentItem.eq(index).fadeIn().siblings().fadeOut(); } // 當(dāng)自動切換時,要更改count,否則每次都從頭開始 this.count = index; }, // 自動切換 autoplay: function () { var _this_ = this; var length = this.liItem.length; // 獲取長度 this.timer = setInterval(function() { _this_.count ++; // 計(jì)數(shù)加一,此時的this是this.timer if (_this_.count >= length) { _this_.count = 0; } // 第幾個li觸發(fā)事件 _this_.liItem.eq(_this_.count).trigger(_this_.config.triggerType); }, this.config.auto); } } window.Tab = Tab; // 將Tab注冊為window對象,不然外部無法訪問 })();
六、調(diào)用
// 將第一個tab傳給Tab類 var tab = new Tab($('.tab').eq(0));
七、優(yōu)化,當(dāng)有多個tab時,不用new多個
1、第一種通過init
// 通過init初始化 Tab.init = function (tabs) { tabs.each(function () { new Tab($(this)); }); }
調(diào)用
Tab.init($('.tab'));
2、第二種通過注冊為jquery方法
// 注冊為jquery方法 $.fn.extend({ tab: function () { this.each(function () { // 這個this是誰調(diào)用的tab方法 new Tab($(this)); // 這個this是each過的li }); return this; // 鏈?zhǔn)讲僮? } })
調(diào)用
$('.tab').tab();
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- javascript實(shí)現(xiàn)tabs選項(xiàng)卡切換效果(自寫原生js)
- 使用vue.js寫一個tab選項(xiàng)卡效果
- Vue.js組件tabs實(shí)現(xiàn)選項(xiàng)卡切換效果
- 原生js實(shí)現(xiàn)tab選項(xiàng)卡切換
- js實(shí)現(xiàn)tab選項(xiàng)卡函數(shù)代碼
- Vue.js組件tab實(shí)現(xiàn)選項(xiàng)卡切換
- js簡單實(shí)現(xiàn)豎向tab選項(xiàng)卡的方法
- JS實(shí)現(xiàn)滑動菜單效果代碼(包括Tab,選項(xiàng)卡,橫向等效果)
- 4種JavaScript實(shí)現(xiàn)簡單tab選項(xiàng)卡切換的方法
- js實(shí)現(xiàn)Tab選項(xiàng)卡切換效果
相關(guān)文章
js實(shí)現(xiàn)單層數(shù)組轉(zhuǎn)多層樹
這篇文章主要介紹了js實(shí)現(xiàn)單層數(shù)組轉(zhuǎn)多層樹方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06JS實(shí)現(xiàn)可展開折疊層的鼠標(biāo)拖曳效果
這篇文章主要介紹了JS實(shí)現(xiàn)可展開折疊層的鼠標(biāo)拖曳效果,具有展開折疊層及實(shí)時顯示鼠標(biāo)坐標(biāo)位置的功能,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10javascript的回調(diào)函數(shù)應(yīng)用示例
回調(diào)函數(shù)就是一個通過函數(shù)指針調(diào)用的函數(shù)。下面以示例的方式為大家介紹下其具體的使用2014-02-02getElementByIdx_x js自定義getElementById函數(shù)
最近看JS代碼,發(fā)現(xiàn)不少人問getElementByIdx_x是什么函數(shù),其實(shí)就是個getElementById自定義函數(shù)2012-01-01javascript 對象比較實(shí)現(xiàn)代碼
js對象比較實(shí)現(xiàn)代碼。2009-04-04es6 filter() 數(shù)組過濾方法總結(jié)
這篇文章主要介紹了es6 filter() 數(shù)組過濾方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04實(shí)現(xiàn)連綴調(diào)用的map方法(prototype)
實(shí)現(xiàn)連綴調(diào)用的map方法(prototype),需要學(xué)習(xí)的朋友可以參考下。2009-08-08靈活使用數(shù)組制作圖片切換js實(shí)現(xiàn)
這篇文章主要介紹了靈活使用數(shù)組制作圖片切換效果,js實(shí)現(xiàn)圖片切換特效,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-07-07