用面对对象方式定tab标签
一些公共的底层的JS方法
var GLOBAL = {};
        GLOBAL.namespace = function (str) {
            var arr = str.split('.'), o = GLOBAL;
            for (var i = (arr[0] == 'GLOBAL') ? 1 : 0; i < arr.length; i++) {
                o[arr[i]] = o[arr[i]] || {};
                o = o[arr[i]];
            }
        }
        GLOBAL.namespace('Dom');
        GLOBAL.Dom.getElementsByClassName = function (str, root, tag) {
            if (root) {
                root = typeof root == 'string' ? document.getElementById(root) : root;
            } else {
                root = document.body;
            }
            tag = tag || "*";
            var els = root.getElementsByTagName(tag), arr = [];
            for (var i = 0, n = els.length; i < n; i++) {
                for (var j = 0, k = els[i].className.split(' '), l = k.length; j < l; j++) {
                    if (k[j] == str) {
                        arr.push(els[i]);
                        break;
                    }
                }
            }
            return arr;
        }
        GLOBAL.Dom.addClass = function (node, str) {
            if (!new RegExp("(^|\\s+)" + str).test(node.className)) {
                node.className = node.className + " " + str;
            }
        }
        GLOBAL.Dom.removeClass = function (node, str) {
            node.className = node.className.replace(new RegExp("(^|\\s+)" + str), "");
        }
        GLOBAL.namespace('Event');
        GLOBAL.Event.on = function (node, eventType, handler, scope) {
            node = typeof node == 'string' ? document.getElementById(node) : node;
            scope = scope || node;
            if (document.all) {
                node.attachEvent('on' + eventType, function () {
                    handler.apply(scope, arguments);
                });
            } else {
                node.addEventListener(eventType, function () {
                    handler.apply(scope, arguments);
                }, false);
            }
        }
基础的HTML
<div class="J_tab">
<div class="tab">
<ul class="tab-menuWrapper">
<li class="J_tab-menu">menu1</li>
<li class="J_tab-menu">menu2</li>
<li class="J_tab-menu">menu3</li>
</ul>
<div class="tab-contentWrapper">
<div class="J_tab-content">
<div>content1</div>
<ul>abc</ul>
</div>
<div class="J_tab-content" style="display: none;">
<p>content2</p>
</div>
<div class="J_tab-content" style="display: none;">content3</div>
</div>
</div>
<hr />
<div class="tab">
<ul class="tab-menuWrapper">
<li class="J_tab-menu">menu1</li>
<li class="J_tab-menu">menu2</li>
<li class="J_tab-menu">menu3</li>
</ul>
<div class="tab-contentWrapper">
<div class="J_tab-content">
<div>content1</div>
<ul>abc</ul>
</div>
<div class="J_tab-content" style="display: none;">
<p>content2</p>
</div>
<div class="J_tab-content" style="display: none;">content3</div>
</div>
</div>
<hr />
<div class="tab">
<ul class="tab-menuWrapper">
<li class="J_tab-menu">menu1</li>
<li class="J_tab-menu">menu2</li>
<li class="J_tab-menu">menu3</li>
</ul>
<div class="tab-contentWrapper">
<div class="J_tab-content">
<div>content1</div>
<ul>abc</ul>
</div>
<div class="J_tab-content" style="display: none;">
<p>content2</p>
</div>
<div class="J_tab-content" style="display: none;">content3</div>
</div>
</div>
</div>
一些基本的CSS
ul {
            padding:;
            margin:;
        }
        .tab {
            width: 400px;
        }
            .tab .tab-currentMenu {
                background-color: #333;
                color: #fff;
            }
            .tab .tab-currentMenu1 {
                background-color: blue;
                color: #fff;
            }
        .underline {
            text-decoration: underline;
        }
        .tab-menuWrapper {
            padding-left: 20px;
        }
            .tab-menuWrapper li {
                float: left;
                display: inline;
                padding: 5px;
                border: 1px solid #333;
                border-bottom: none;
                margin-right: 5px;
            }
        .tab-contentWrapper {
            border: 1px solid #333;
            clear: left;
            padding: 5px;
        }
实现tab效果的JS
function Tab(config) {
            debugger;
            this._root = config.root;
            this._currentClass = config.currentClass;
            var trigger = config.trigger || 'click';
            this._handler = config.handler;
            var autoPlay = config.autoPlay;
            var playTime = config.playTime || 3000;
            this._tabMenus = GLOBAL.Dom.getElementsByClassName("J_tab-menu", this._root);
            this._tabContents = GLOBAL.Dom.getElementsByClassName("J_tab-content", this._root);
            this.currentIndex = 0;
            var This = this;
            if (autoPlay) {
                setInterval(function () {
                    This._autoHandler();
                }, playTime);
            }
            for (var i = 0; i < this._tabMenus.length; i++) {
                this._tabMenus[i]._index = i;
                GLOBAL.Event.on(this._tabMenus[i], trigger, function () {
                    This.showItem(this._index);
                    this.currentIndex = this._index;
                });
            }
        }
        Tab.prototype = {
            showItem: function (n) {
                for (var i = 0; i < this._tabContents.length; i++) {
                    this._tabContents[i].style.display = 'none';
                }
                this._tabContents[n].style.display = 'block';
                if (this._currentClass) {
                    var currentMenu = GLOBAL.Dom.getElementsByClassName(this._currentClass, this._root)[0];
                    if (currentMenu) {
                        GLOBAL.Dom.removeClass(currentMenu, this._currentClass);
                    }
                    GLOBAL.Dom.addClass(this._tabMenus[n], this._currentClass);
                }
                if (this._handler) {
                    this._handler(n);
                }
            },
            _autoHandler: function () {
                this.currentIndex++;
                if (this.currentIndex >= this._tabMenus.length) {
                    this.currentIndex = 0;
                }
                this.showItem(this.currentIndex);
            }
        };
调用tab的JS
        var tabs = GLOBAL.Dom.getElementsByClassName("tab");
        console.dir(tabs.length);
        new Tab({ root: tabs[0], trigger: "mouseover" });
         new Tab({ root: tabs[1], currentClass: "tabcurrentMenu", autoPlay: true, playTime: 5000 });
         new Tab({
             root: tabs[2], currentClass: "tabcurrentMenu", trigger: "mouseover", handler: function (index) {
                 console.log('您激活的是第' + (index + 1) + '个标签');
             }
         });
用面对对象方式定tab标签的更多相关文章
- 多iframe使用tab标签方式添加、删除、切换的处理实例
		紧接着上一篇随笔iframe的内容增高或缩减时设置其iframe的高度的处理方案 如果采用iframe来切换显示内容的方式来展现办公Web.那么需要解决几个问题 1.tab标签需要和显示的iframe ... 
- Android UI--ViewPager扩展Tab标签指示
		Android UI--ViewPager扩展Tab标签指示 2013年8月30日出来冒冒泡 ViewPager这个控件已经不算是陌生的了,各种玩Android的小伙伴们都有发表相应的文章来讲它.我看 ... 
- React Native 系列(九) -- Tab标签组件
		前言 本系列是基于React Native版本号0.44.3写的.很多的App都使用了Tab标签组件,例如QQ,微信等等,就是切换不同的选项,显示不同的内容.那么这篇文章将介绍RN中的Tab标签组件. ... 
- 在Bootstrap开发中解决Tab标签页切换图表显示问题
		在做响应式页面的时候,往往需要考虑更多尺寸设备的界面兼容性,一般不能写死像素,以便能够使得界面元素能够根据设备的不同进行动态调整,但往往有时候还是碰到一些问题,如Tab标签第一页面正常显示,但是切换其 ... 
- Python - 面对对象(基础)
		目录 Python - 面对对象(基础) 一. 概述 二. 创建类和对象 三. 面向对象三大特征 封装 继承 多态 Python - 面对对象(基础) 一. 概述 面向过程:根据业务逻辑从上到下写垒代 ... 
- TabActivity中的Tab标签详细设置
		参考链接: http://www.iteye.com/topic/602737 这个写的很不错,我是跟着一步步写下来的,不过到最后也遇到了麻烦,就是不能将Tab标签的文字和图片分开,始终是重合的,而且 ... 
- Android(java)学习笔记129:Tab标签的使用
		1.案例1---TabProject (1)首先是main.xml文件: <?xml version="1.0" encoding="utf-8"?> ... 
- 基于duilib实现的可滑动tab标签控件
		最近一直在忙棋牌游戏大厅的开发,使用了duilib界面库,在大厅界面游戏菜单的展现上需要用到滑动的效果,类似悠扬棋牌,jj棋牌的菜单左右(上下)滑动的效果.通过自己的设计思路完善了一个可滑动的tab标 ... 
- 很好用的Tab标签切换功能,延迟Tab切换。
		一个网页,Tab标签的切换是常见的功能,但我发现很少有前端工程师在做该功能的时候,会为用户多想想,如果你觉得鼠标hover到标签上,然后切换到相应的内容,就那么简单的话,你将是一个不合格的前端工程师啊 ... 
随机推荐
- 代码重构之 —— 一堆if、esle 逻辑的处理
			这几天,接手一个同事的代码,关于微信接口开发的,那一堆的 if,看得哥蛋痛了,这个毛病也是很多新手容易犯的,所以特地把这次重构写出来. 下面来我们看看这个代码的问题所在,if else 里面的代码块逻 ... 
- How to remove a batch of VMs and related Disks
			Foreword Need to remove a batch of VMs, which named with same prefix or belong to same Cloud Service ... 
- Log4net使用(二)
			日志记录到根目录Log文件夹,文件夹中分LogError与LogInfo文件夹 web.config配置: <configSections> <section name=" ... 
- MSSQL 问题集锦
			[1]关于SQL Server数据库连接字符串的特殊参数说明 MultipleActiveResultSets和Mars_Connection同义,指定此数据库连接是否复用数据库内已建立的相同用户的连 ... 
- CSS 栅格布局
			bootstrap3.0教程之栅格系统原理(布局) http://www.jb51.net/css/152846.html [div+css]栅格化布局样式备用坑 http://www.0773lin ... 
- python表达式操作符【学习python必知必会】
			运算符 描述 实例 yield x 生成器函数发送协议 lambda args: expression 生成匿名函数 x if y else z 三元选择表达式(c系列有的 python也要有 ... 
- Beta版本冲刺———第二天
			会议照片: 项目燃尽图: 1.项目进展: 昨天的困难:分数排行榜的设计 今天解决的进度:完成了界面优化以及建立新的排行榜选项卡界面. 明天要做的事情:分数排行榜的功能设计 2.每个人每天做的事情 郭怡 ... 
- this  Activity.this  Activity.class
			1. this 与 Activity.this this是你当前对象的引用,在你的例子中你肯定在内部类ClickEvent里面实现intent,他指向的是ClickEvent,而不是你要传入的Acti ... 
- java 上传图片 并压缩图片大小
			Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ... 
- 【BZOJ 3053】The Closest M Points
			KDTree模板,在m维空间中找最近的k个点,用的是欧几里德距离. 理解了好久,昨晚始终不明白那些“估价函数”,后来才知道分情况讨论,≤k还是=k,在当前这一维度距离过线还是不过线,过线则要继续搜索另 ... 
