html选项卡插件,JS实现选项卡插件的两种写法(jQuery和class)

本文实例为大家分享了JS实现选项卡插件的2种写法,供大家参考,具体内容如下

实现插件的几个注意点:

(1)定义一个固定的html结构,比如选项卡的标题的标签为为li,每个选项卡的内容的标签为div等等;

(2)选中时的样式提前确定;

(3)最好先用简单的JS实现选项卡的功能,再改为插件的模式。

html结构如下:

* {

margin: 0;

padding: 0;

}

ul {

list-style: none;

}

#tabBox {

box-sizing: border-box;

margin: 20px auto;

width: 500px;

}

.navBox {

display: flex;

position: relative;

top: 1px;

}

.navBox li {

box-sizing: border-box;

margin-right: 10px;

padding: 0 10px;

line-height: 35px;

border: 1px solid #999;

cursor: pointer;

}

.navBox li.active {

border-bottom-color: #FFF;

}

#tabBox>div {

display: none;

box-sizing: border-box;

padding: 10px;

height: 150px;

border: 1px solid #999;

}

#tabBox>div.active {

display: block;

}

编程使我快乐
读书使我幸福
运动使我健康

先用JS实现选项卡的功能:

let len = liList.length;

for(let i = 0; i < len; i++) {

liList[i].index = i;

liList[i].onclick = function() {

for(let j = 0; j < len; j++) {

if(j === this.index) {

liList[j].className = 'active';

contentList[j].className = 'active';

}

else{

liList[j].className = '';

contentList[j].className = '';

}

}

};

}

实现插件的第一种方法:jQuery

利用$.fn.extend方法,在jQuery上扩展一个选项卡功能的方法:

(function($){

function clickLi() {

let $this = this,

$navBox = $this.find('.navBox'),

$liList = $navBox.find('li'),

$contentList = $this.find('div');

$liList.click(function(){

let $this = $(this),

index = $this.index();

$this.addClass('active').siblings().removeClass('active');

$contentList.eq(index).addClass('active').siblings().removeClass('active');

});

}

$.fn.extend({

tabClick: clickLi

});

})(jQuery);

使用方法:

let $tabBox = $('#tabBox');

$tabBox.tabClick();

实现插件的第二种方法:class

利用ES6中的class类,创建一个选项卡类Tab,并添加属性和方法,并且可以多参数传递实现选项卡:

(function(){

class Tab {

constructor(selector, options) {

// 处理第一个参数

if(!selector)

throw new ReferenceError('The first selector parameter must be passed~~');

if(typeof selector === 'string')

this.container = document.querySelector(selector);

else if(selector.nodeType)

this.container = selector;

this.initialParams(options);

this.navBox = this.container.querySelector('.navBox'),

this.liList = this.navBox.querySelectorAll('li'),

this.contentList = this.container.querySelectorAll('div'),

this.count = this.liList.length;

this.change();

this.handleLi();

}

// 初始化参数

initialParams(options) {

let _default = {

showIndex: 0,

triggerEvent: 'click'

};

for(let key in options) {

if (!options.hasOwnProperty(key)) break;

_default[key] = options[key];

}

// 把信息挂载到实例上

for (let key in _default) {

if (!_default.hasOwnProperty(key)) break;

this[key] = _default[key];

}

}

// 切换标题

change() {

[].forEach.call(this.liList, (item, index) => {

if(index === this.showIndex) {

this.liList[index].className = 'active';

this.contentList[index].className = 'active';

return;

}

this.liList[index].className = '';

this.contentList[index].className = '';

});

}

// 绑定标题对应的事件

handleLi() {

[].forEach.call(this.liList, (item, index) => {

item.addEventListener(this.triggerEvent, () => {

this.showIndex = index;

this.change();

});

});

}

}

window.Tab = Tab;

})();

使用方法:

new Tab('#tabBox', {

showIndex: 2,

triggerEvent: 'mouseenter'

});

第二种方法是现在常用的方法,因为它可以传递很多参数。可以根据需求,设置默认要传递的参数,将这个选项卡插件做的更完善。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值