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


Posted in Javascript onJuly 13, 2017

这个插件对应的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学习总结_选项卡封装(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 操作文件 实现方法小结
Jul 02 Javascript
JQuery each()函数如何优化循环DOM结构的性能
Dec 10 Javascript
js判断样式className同时增加class或删除class
Jan 30 Javascript
js动态生成指定行数的表格
Jul 11 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
Apr 15 Javascript
JS不完全国际化&amp;本地化手册 之 理论篇
Sep 27 Javascript
JavaScript中双符号的运算详解
Mar 12 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
Mar 25 Javascript
jQuery实现模糊搜索功能的方法分析
Jun 29 jQuery
Vue Promise的axios请求封装详解
Aug 13 Javascript
Vue cli构建及项目打包以及出现的问题解决
Aug 27 Javascript
微信小程序适配iphoneX的实现方法
Sep 18 Javascript
用户管理的设计_jquery的ajax实现二级联动效果
Jul 13 #jQuery
通过命令行生成vue项目框架的方法
Jul 12 #Javascript
微信小程序实现点击返回顶层的方法
Jul 12 #Javascript
使用AngularJS对表单提交内容进行验证的操作方法
Jul 12 #Javascript
JQuery EasyUI的一些常用组件
Jul 12 #jQuery
JavaScript严格模式下关于this的几种指向详解
Jul 12 #Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
Jul 12 #jQuery
You might like
基于PHP导出Excel的小经验 完美解决乱码问题
2013/06/10 PHP
php面向对象与面向过程两种方法给图片添加文字水印
2015/08/26 PHP
PHP上传图片类显示缩略图功能
2016/06/30 PHP
PHP正则匹配到2个字符串之间的内容方法
2018/12/24 PHP
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
判断浏览器的javascript版本的代码
2010/09/03 Javascript
JS 无限级 Select效果实现代码(json格式)
2011/08/30 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
2013/08/19 Javascript
jqgrid 表格数据导出实例
2013/11/21 Javascript
javascript中验证大写字母、数字和中文
2014/01/15 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
2015/03/11 Javascript
两种JS实现屏蔽鼠标右键的方法
2020/08/20 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
详解Node.js中的事件机制
2016/09/22 Javascript
JS重载实现方法分析
2016/12/16 Javascript
微信小程序自定义组件
2017/08/16 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
vue组件开发props验证的实现
2019/02/12 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
JS操作json对象key、value的常用方法分析
2019/10/29 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
2020/02/24 Javascript
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
python opencv 批量改变图片的尺寸大小的方法
2019/06/28 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
Python 中@property的用法详解
2020/01/15 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
2020/05/25 Python
python如何建立全零数组
2020/07/19 Python
Pythonic版二分查找实现过程原理解析
2020/08/11 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
英国伦敦的睡衣品牌:Asceno
2019/10/06 全球购物
营业员实习自我鉴定
2013/12/07 职场文书