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 相关文章推荐
jQuery如何获取同一个类标签的所有值(默认无法获取)
Sep 25 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
Feb 17 Javascript
JS模拟按钮点击功能的方法
Dec 22 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
Jun 22 Javascript
easyui tree带checkbox实现单选的简单实例
Nov 07 Javascript
jQuery实现文档树效果
Feb 20 Javascript
js实现手机发送验证码功能
Mar 13 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
Oct 13 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
Apr 09 Javascript
详解Vue内部怎样处理props选项的多种写法
Nov 06 Javascript
开发中常用的25个JavaScript单行代码(小结)
Jun 28 Javascript
node中使用log4js4.x版本记录日志的方法
Aug 20 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
松下Panasonic RF-B65电路分析
2021/03/02 无线电
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
php 指定范围内多个随机数代码实例
2016/07/18 PHP
js页面滚动时层智能浮动定位实现(jQuery/MooTools)
2011/08/23 Javascript
使用JavaScript动态设置样式实现代码及演示动画
2013/01/25 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
jQuery制作简单柱状图实例
2015/01/28 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
js实现简单数字变动效果
2017/11/06 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
Node.js实现注册邮箱激活功能的方法示例
2018/03/23 Javascript
jQuery实现的别踩白块小游戏完整示例
2019/01/07 jQuery
Vue的生命周期操作示例
2019/09/17 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
原生js实现自定义消息提示框
2020/11/19 Javascript
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
深入解析Python中的urllib2模块
2015/11/13 Python
Python如何获取系统iops示例代码
2016/09/06 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
2018/07/11 Python
对python条件表达式的四种实现方法小结
2019/01/30 Python
超简单使用Python换脸实例
2019/03/27 Python
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
教育专业个人求职信
2013/12/02 职场文书
学校安全检查制度
2014/01/27 职场文书
档案信息化建设方案
2014/05/16 职场文书
工程材料采购方案
2014/05/18 职场文书
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2014班子成员自我剖析材料思想汇报
2014/10/01 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
Python提取PDF指定内容并生成新文件
2021/06/09 Python
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏
Win10 heic文件怎么打开 ? Win10 heic文件打开教程
2022/04/06 数码科技