当前位置:首页 > 日记 > 正文

js学习总结_选项卡封装 | 实例讲解

js学习总结_选项卡封装 | 实例讲解

这个插件对应的html的结构如下

<div class='box' id='tabFir'>    <ul id='tabOptions'>      <li class='select'>页卡一</li>      <li>页卡二</li>      <li>页卡三</li>    </ul>    <div class='select'>      <div>1</div>      <div>2</div>      <div>3</div>      <div>4</div>    </div>    <div>内容二</div>    <div>内容三</div>  </div>

版本1

//实现一个选项卡封装:我们可以分析出,只要多个选项卡的主体结构一样,那么每个实现的思想都是一样的,唯一不一样的就是最外层的盒子不一样~function(){  /*    tabChange:封装一个选项卡的插件,只要大结构保持统一,以后实现选项卡的功能,只需要调取这个方法执行即可实现    param:container当前要实现选项卡的这个容器        defaultIndex:默认选中项的索引  */  function tabChange(container,defaultIndex){    var tabFirst = utils.firstChild(container),oLis = utils.children(tabFirst);    var divList = utils.children(container,"div");    //让defaultIndex对应的页卡有选中的样式    defaultIndex = defaultIndex || 0;    utils.addClass(oLis[defaultIndex],"select");    utils.addClass(divList[defaultIndex],"select");    //具体的切换功能    for(var i = 0;i<oLis.length;i++){      oLis[i].onclick = function(){        utils.addClass(this,"select");        var curSiblings = utils.siblings(this);        for(var i = 0;i<curSiblings.length;i++){          utils.removeClass(curSiblings[i],"select")        }        var index = utils.index(this);        for(var i = 0;i<divList.length;i++){          i===index ? utils.addClass(divList[i],"select") : utils.removeClass(divList[i],"select")        }      }      }      }  window.fTab = tabChange  }()

版本2(将for循环改为使用事件委托的方式)

//实现一个选项卡封装:我们可以分析出,只要多个选项卡的主体结构一样,那么每个实现的思想都是一样的,唯一不一样的就是最外层的盒子不一样~function(){  /*    tabChange:封装一个选项卡的插件,只要大结构保持统一,以后实现选项卡的功能,只需要调取这个方法执行即可实现    param:container当前要实现选项卡的这个容器        defaultIndex:默认选中项的索引  */  function tabChange(container,defaultIndex){    var tabFirst = utils.firstChild(container),oLis = utils.children(tabFirst);    var divList = utils.children(container,"div");    //让defaultIndex对应的页卡有选中的样式    defaultIndex = defaultIndex || 0;    utils.addClass(oLis[defaultIndex],"select");    utils.addClass(divList[defaultIndex],"select");    //具体的切换功能        //使用事件委托优化    tabFirst.onclick = function(e){      e = e || window.event;      e.target = e.target || e.srcElement;      if(e.target.tagName.toLowercase()==="li"){//说明当前点击的是li标签        detailFn.call(e.target,oLis,divList);      }    }  }  function detailFn(oLis,divList){    var index = utils.index(this);    utils.addClass(this,"select");    for(var i = 0;i<oLis.length;i++){      i!==index?utils.removeClass(oLis[i],"select"):null;      i===index ? utils.addClass(divList[i],"select") : utils.removeClass(divList[i],"select");    }  }  window.fTab = tabChange  }()

版本3:面向对象的方式,使用构造函数

//实现一个选项卡封装:我们可以分析出,只要多个选项卡的主体结构一样,那么每个实现的思想都是一样的,唯一不一样的就是最外层的盒子不一样~function(){  /*    tabChange:封装一个选项卡的插件,只要大结构保持统一,以后实现选项卡的功能,只需要调取这个方法执行即可实现    param:container当前要实现选项卡的这个容器        defaultIndex:默认选中项的索引  */  function TabChange(container,defaultIndex){    this.init(container,defaultIndex);  }  TabChange.prototype = {    constructor:TabChange,//注意重写原型方法,需要重新指定构造器    //初始化 ,也是当前插件的唯一入口    init:function(container,defaultIndex){      this.container = container || null;      this.defaultIndex = defaultIndex || 0;      this.tabFirst = utils.firstChild(this.container);      this.oLis = utils.children(this.tabFirst);      this.divList = utils.children(this.container,"div");      this.defaultIndexEven();      this.liveClick();      return this;    },    //事件委托实现绑定切换    liveClick:function(){      var _this = this;      this.tabFirst.onclick = function(e){        e = e || window.event;        e.target = e.target || e.srcElement;        if(e.target.tagName.toLowercase()==="li"){//说明当前点击的是li标签          _this.detailFn(e.target);        }      }    },    detailFn:function(curEle){      var index = utils.index(curEle);      utils.addClass(curEle,"select");      for(var i = 0;i<this.oLis.length;i++){        i!==index?utils.removeClass(this.oLis[i],"select"):null;        i===index ? utils.addClass(this.divList[i],"select") : utils.removeClass(this.divList[i],"select");      }    },    //按照索引来设置默认选中的页卡    defaultIndexEven:function(){      utils.addClass(this.oLis[this.defaultIndex],"select");      utils.addClass(this.divList[this.defaultIndex],"select");    }  }  window.fTab = TabChange  }()//使用var box1 = new fTab(boxList[0],0)

以上这篇js学习总结_选项卡封装(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

相关文章

JS实现预览的两种方式

JS实现预览的两种方式

两种,方式,电脑软件,JS,考虑到用户体验, 网页的图片上传数据库前,先预览是很有必要的一个步骤,第一可以给用户带来安全感,第二防止图片文件有问题而提交到数据库,占用存储资源。那么要实现预览有两种方式:一种是用window.URL.createObjectURl方法…

AngularJS实现根据不同条件显示不

AngularJS实现根据不同条件显示不

条件,控件,显示,电脑软件,AngularJS,由于项目需求,需要实现根据不同条件显示不同控件的功能。具体要求如下图所示:即当选择“每单固定减”时,下方只显示“减免金额”一栏; 当选择“每单固定折扣”时,下方只显示“折扣比例”一栏; 当选择“…

如何隐藏与显示Word2010文档中的文

如何隐藏与显示Word2010文档中的文

文档,文字,显示,电脑软件,  隐藏文字其实是一种很不错的保护Word文档安全的方法,而且这种方法很少有人使用,大多数人一般会选择给文档加密。以下是小编为您带来的关于隐藏与显示Word2010文档中的文字,希望对您有所帮助。隐藏与显示Word2010…

wps文字怎么设置文字环绕

wps文字怎么设置文字环绕

文字,设置,步骤,方法,图片,  wps文字是word的替代品,是一款可以进行文字编辑的办公软件,我们再输入很长文档的时候要插入图片,这个时候,我们如何设置让文字环绕图片排列显示呢?下面小编来告诉你怎么设置文字环绕图片吧,希望对你有帮助!wps文字…

qq带名字的情侣签名

qq带名字的情侣签名

情侣,名字,大全,电脑软件,qq,  一句签名:如果我的生命只剩下一分钟,我会爱你到最后的一秒。下面小编给大家分享了关于qq带名字的情侣签名,希望你喜欢。qq带名字的情侣签名精选1) 不要跟我说未来,未来还未到来。2) 不要跟我说曾经,曾经只是曾经…

zTree获取当前节点的下一级子节点

zTree获取当前节点的下一级子节点

节点,子节点,实例,电脑软件,zTree,使用zTree插件实现树形图中,需要获取当前点击的父节点的子节点数的需求,使用treeNode.children获取子节点数据集合,使用length方法获取集合长度。将当前节点的treeNode传入即可调用。/*查找当前节点下一级的…

怎样在word2013中批量删除

怎样在word2013中批量删除

批量删除,电脑软件,  很多时候,我们需要将Word文档中的团片删除掉,只保留文字内容,不过由于文档中图片数量过多,一张一张删除太费事。那么下面就由小编给大家分享下word2013中批量删除图片的技巧,希望能帮助到您。word2013中批量删除图片的步…

手机QQ语聊大厅怎么同附近陌生人语

手机QQ语聊大厅怎么同附近陌生人语

语音,大厅,方法,陌生人,语聊,  在手机QQ附近的人应用中,有一款语聊大厅的功能,可以和附近陌生人语音群聊。下面小编就来体验一下手机QQ语聊大厅和附近陌生人语音群聊的方法。手机QQ语聊大厅同附近陌生人语音群聊的方法打开你最新版本的手机…

JavaScript自定义分页样式

JavaScript自定义分页样式

自定义,分页,样式,电脑软件,JavaScript,自定义分页样式,不多废话,直接上代码~ html部分<div id="my_id"> <div class="my_id"> <table style=""> <thead style=""> <tr> <td>购买日期</td…

实例详解PPT中表格美化有哪些方法

实例详解PPT中表格美化有哪些方法

方法,详解,表格,实例,有哪些,  PPT2013或PPT2016中表格的默认设置已经挺漂亮的了,但默认的设置毕竟要和PPT整体的风格一致才好,因此依然需要对PPT中表格进行进一步的美化设计。以下是小编为您带来的关于xxxx,希望对您有所帮助。实例详解PPT…

深入理解在JS中通过四种设置事件处

深入理解在JS中通过四种设置事件处

处理程序,设置,事件,方法,四种,所有的JavaScript事件处理程序的作用域是在其定义时的作用域而非调用时的作用域中执行,并且它们能存取那个作用域中的任何一个本地变量。但是HTML标签属性注册处理程序就是一个例外。看下面四种方式:第一种方…

在Word2007文档中如何设置段落间距

在Word2007文档中如何设置段落间距

设置,文档,间距,段落,如何设置,  段落间距是指段落与段落之间的距离,在Word2007中,用户可以通过多种渠道设置段落间距。以下是小编为您带来的关于在Word2007设置段落间距,希望对您有所帮助。在Word2007设置段落间距方法1:在Word2007文档窗口…