找回密码
 注册

只需一步,快速开始

蓝色理想 最新研发动态 新增登录提醒插件 - 用至我的站点 地图任务一定要做 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

MIUI手机主题设计大赛,奔驰大奖等你拿! 想加薪?!蓝色理想招聘提供你更多机会 悬赏答疑,赚取积分兑奖品!

查看: 68505|回复: 369

【原创】滑动门导航类,多种好看且实用的示例,一定来看看!(8月1日更新) [复制链接]

yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5637
威望
45
居住地
浙江省 杭州市
发表于 2009-6-23 16:44:10 |显示全部楼层
本帖最后由 yaohaixiao 于 2012-4-6 17:23 编辑

演示示例:


Ajax标签导航






MSN皮肤图片自切换标题新闻



YAHOO皮肤多嵌套标签导航



仿京东侧边栏导航菜单代码



多重tab嵌套导航



多标签滚动选项卡代码



隔行换色+标签导航












数字索引带标题和简介的效果






自动横向透明过度切换的效果



数字索引透明过度切换的效果



小秘书图片自动切换标题新闻



自动纵向滚动切换效果





字母索引导航菜单


说明:简化版JS文件只有2.06KB,只提供最简单的tab切换,不需要更多功能的朋友,可以选择这个,不需要加载我的那个YAO.JS库文件了,体积减小了很多。

下载地址: (2012-4-6更新)

说明:今天把之前整理到的代码都更新上来了,想用的朋友可以自己下载




YTabs.js(8-1更新,代码有了很大的调整,但是灵性和扩展型也更好了)
  1. YAO.singleTab = function(oConfigs){
  2.         this.tabRoot = YAO.isString(oConfigs.tabRoot) ? YAO.getEl(oConfigs.tabRoot) : (oConfigs.tabRoot || null);
  3.         this.tabs = YAO.isString(oConfigs.tabs) ? this.tabRoot.getElementsByTagName(oConfigs.tabs) : (oConfigs.tabs || null);
  4.         this.contents = YAO.isString(oConfigs.contents) ? this.tabRoot.getElementsByTagName(oConfigs.contents) : (oConfigs.contents || null);
  5.        
  6.         if(!this.tabs || !this.contents){
  7.                 return false;
  8.         }
  9.        
  10.         this.length = this.tabs.length || 0;
  11.         this.defaultIndex = oConfigs.defaultIndex || 0;
  12.         this.lastIndex = this.defaultIndex;
  13.         this.lastTab = this.tabs[this.lastIndex] || null;
  14.         this.lastContent = this.contents[this.lastIndex] || null;
  15.         this.evtName = oConfigs.evt || 'mouseover';
  16.         this.defaultClass = oConfigs.defaultClass || this.CURRENT_TAB_CLASS;
  17.         this.previousClass = oConfigs.previousClass || '';
  18.         this.hideAll = oConfigs.hideAll || false;
  19.         this.auto = oConfigs.auto || false;
  20.         this.autoSpeed = oConfigs.autoSpeed || 6000;
  21.         this.fadeUp = oConfigs.fadeUp || false;
  22.         this.scroll = oConfigs.scroll || false;
  23.         this.scrollId = oConfigs.scrollId || null;
  24.         this.scrollSpeed = oConfigs.scrollSpeed || 5;
  25.     this.direction = oConfigs.direction || 'V';
  26.         this.activeTag = oConfigs.activeTag || 'IMG';
  27.         this.stepHeight = oConfigs.stepHeight || 0;
  28.         this.stepWidth = oConfigs.stepWidth || 0;
  29.         this.ajax = oConfigs.ajax || false;
  30.         this.ajaxDefaultInfo = this.contents.innerHTML;
  31.         this.aPath = oConfigs.aPath || '';
  32.        
  33.         this.init();
  34. };
  35. YAO.singleTab.prototype.timer = null;
  36. YAO.singleTab.prototype.isPause = false;
  37. YAO.singleTab.prototype.CURRENT_TAB_CLASS = 'current';
  38. YAO.singleTab.prototype.init = function(){
  39.         var i, that = this;
  40.         if (this.tabs && this.contents) {
  41.                 if (this.auto) {
  42.                         this.timer = setTimeout(function(){
  43.                                 that.autoChange();
  44.                         }, that.autoSpeed);
  45.                 }
  46.                 if (!this.hideAll) {
  47.                         YAO.addClass(this.lastTab, this.defaultClass);
  48.                         if (!this.ajax && !this.scroll) {
  49.                                 if (this.lastContent) {
  50.                                         this.lastContent.style.display = 'block';
  51.                                 }
  52.                         }
  53.                         if (this.ajax) {
  54.                                 this.ajaxTab(this.lastTab);
  55.                         }
  56.                         if (this.scroll) {
  57.                                 this.scrollCnt((this.lastContent || this.contents), this.defaultIndex);
  58.                         }
  59.                 }
  60.                 else {
  61.                         YAO.removeClass(this.lastTab, this.defaultClass);
  62.                 }
  63.                 for (i = 0; i < this.length; ++i) {
  64.                         if (i !== this.defaultIndex) {
  65.                                 YAO.removeClass(this.tabs[i], this.CURRENT_TAB_CLASS);
  66.                                 if (!this.ajax && !this.scroll) {
  67.                                         this.contents[i].style.display = 'none';
  68.                                 }
  69.                         }
  70.                         YAO.on(this.tabs[i], this.evtName, function(index){
  71.                                 return function(event){
  72.                                         var evt = null, curClass = (this.tabs[index] === this.tabs[this.defaultIndex]) ? this.defaultClass : this.CURRENT_TAB_CLASS;
  73.                                         if (!YAO.hasClass(this.tabs[index], curClass)) {
  74.                                                 var currentContent = (this.ajax || (this.scroll && (this.stepHeight || this.stepWidth))) ? this.contents : (this.contents[index] || null);
  75.                                                
  76.                                                 this.setCurrent(currentContent, index);
  77.                                                 this.lastIndex = index;
  78.                                         }
  79.                                         if (this.auto) {
  80.                                                 this.isPause = true;
  81.                                         }
  82.                                         evt = event || window.event;
  83.                                         YAO.stopEvent(evt);
  84.                                 }
  85.                         }(i), this.tabs[i], that);
  86.                         YAO.on(this.tabs[i], 'mouseout', function(index){
  87.                                 return function(){
  88.                                         var curTab = this.tabs[index];
  89.                                         if (this.hideAll && this.evtName === 'mouseover') {
  90.                                                 if (this.lastTab === curTab) {
  91.                                                         YAO.removeClass(curTab, (YAO.hasClass(curTab, that.defaultClass) ? this.defaultClass : this.CURRENT_TAB_CLASS));
  92.                                                 }
  93.                                                 if (this.previousClassTab) {
  94.                                                         YAO.removeClass(this.previousClassTab, this.previousClass);
  95.                                                 }
  96.                                                 if (!this.scroll && !this.ajax) {
  97.                                                         this.contents[index].style.display = 'none';
  98.                                                 }
  99.                                         }
  100.                                         else {
  101.                                                 if (this.auto) {
  102.                                                         this.isPause = false;
  103.                                                 }
  104.                                         }
  105.                                 }
  106.                         }(i), this.tabs[i], that);
  107.                 }
  108.         }
  109. };
  110. YAO.singleTab.prototype.autoChange = function(){
  111.         var that = this;
  112.         if (!this.isPause) {
  113.                 var currentContent = null, currentTab = null;
  114.                 if (this.timer) {
  115.                         clearTimeout(this.timer);
  116.                         this.timer = null;
  117.                 }
  118.                 this.lastIndex = this.lastIndex + 1;
  119.                 if (this.lastIndex === this.length) {
  120.                         this.lastIndex = 0;
  121.                 }
  122.                 currentContent = this.ajax ? this.contents : (this.contents[this.lastIndex] || null);
  123.                 this.setCurrent(currentContent, this.lastIndex);
  124.                 this.timer = setTimeout(function(){
  125.                         that.autoChange();
  126.                 }, this.autoSpeed);
  127.         }
  128.         else {
  129.                 this.timer = setTimeout(function(){
  130.                         that.autoChange()
  131.                 }, this.autoSpeed);
  132.                 return false;
  133.         }
  134. };
  135. YAO.singleTab.prototype.setCurrent = function(curCnt, index){
  136.         var activeObj = null;
  137.         curTab = this.tabs[index];
  138.         YAO.removeClass(this.lastTab, (YAO.hasClass(this.lastTab, this.defaultClass) ? this.defaultClass : this.CURRENT_TAB_CLASS));
  139.         if (curTab === this.tabs[this.defaultIndex]) {
  140.                 YAO.addClass(curTab, this.defaultClass);
  141.         }
  142.         else {
  143.                 YAO.addClass(curTab, this.CURRENT_TAB_CLASS);
  144.         }
  145.         if (this.previousClass) {
  146.                 if (this.previousClassTab) {
  147.                         YAO.removeClass(this.previousClassTab, this.previousClass);
  148.                 }
  149.                 if (index !== 0) {
  150.                         YAO.addClass(this.tabs[index - 1], this.previousClass);
  151.                         if ((index - 1) === this.defaultIndex) {
  152.                                 YAO.removeClass(this.tabs[index - 1], this.defaultClass);
  153.                         }
  154.                         this.previousClassTab = (this.tabs[index - 1]);
  155.                 }
  156.         }
  157.         if (!this.scroll && !this.ajax) {
  158.                 if (this.lastContent) {
  159.                         this.lastContent.style.display = "none";
  160.                 }
  161.                 if (curCnt) {
  162.                         curCnt.style.display = "block";
  163.                 }
  164.         }
  165.        
  166.         if (this.fadeUp) {
  167.                 activeObj = (curCnt.tagName.toUpperCase() === 'IMG') ? curCnt : curCnt.getElementsByTagName('img')[0];
  168.                 if (this.lastContent !== curCnt) {
  169.                         YAO.fadeUp(activeObj);
  170.                 }
  171.         }
  172.         else {
  173.                 if (this.scroll) {
  174.                         this.scrollCnt(curCnt, index);
  175.                 }
  176.         }
  177.         if (!this.ajax) {
  178.                 this.lastContent = curCnt;
  179.         }
  180.         else {
  181.                 if (this.ajax) {
  182.                         this.ajaxTab(curTab);
  183.                 }
  184.         }
  185.         this.lastTab = curTab;
  186. };
  187. YAO.singleTab.prototype.scrollCnt = function(curCnt, index){
  188.         var activeObj = null, itemHeight = 0, itemWidth = 0, scrollWidth = 0, scrollHeight = 0;
  189.         if (this.activeTag) {
  190.                 activeObj = (curCnt.tagName.toUpperCase() === this.activeTag) ? curCnt : curCnt.getElementsByTagName(this.activeTag)[0];
  191.         }
  192.         if (this.direction === 'V') {
  193.                 itemHeight = activeObj ? activeObj.offsetHeight : this.stepHeight;
  194.                 scrollHeight = -(index * itemHeight);
  195.         }
  196.         else {
  197.                 itemWidth = activeObj ? activeObj.offsetWidth : this.stepWidth;
  198.                 scrollWidth = -(index * itemWidth);
  199.         }
  200.         YAO.moveElement(this.scrollId, scrollWidth, scrollHeight, this.scrollSpeed);
  201. };
  202. YAO.singleTab.prototype.ajaxTab = function(curTab){
  203.         var url = '', ajaxLink = null, cnt = this.contents, uriData = this.aPath.split('/');
  204.         ajaxLink = (curTab.tagName.toUpperCase() === 'A') ? curTab : curTab.getElementsByTagName('a')[0];
  205.         url = uriData[0] + '/' + ajaxLink.rel + uriData[1] + uriData[2] + ajaxLink.rel;
  206.        
  207.         if (curTab === this.tabs[this.defaultIndex]) {
  208.                 cnt.innerHTML = this.ajaxDefaultInfo;
  209.         }
  210.         else {
  211.                 YAO.ajax({
  212.                         url: url,
  213.                         element: cnt,
  214.                         load: cnt.innerHTML
  215.                 });
  216.         }
  217. };
复制代码
页面的调用
  1. YTabs.tabs({
  2.         tabId: 'yTabs',
  3.         tTag: 'dd',
  4.         cTag: 'dt'
  5. }, {
  6.                 tabs: YTabs.getByClassName('main-tab', 'li', 'main_navigation'),
  7.                 contents: YTabs.getByClassName('submenu', 'ul', 'main_navigation')
  8. }, {
  9.         tabId: 'letters',
  10.         tTag: 'li',
  11.         cTag: 'dl',
  12.         hideAll: true,
  13.         previousClass: 'off'
  14. }, {
  15.         tabs: YTabs.getByClassName('main-tab', 'li', 'menus'),
  16.         contents: YTabs.getByClassName('sub-menu', 'ul', 'menus'),
  17.         hideAll: true
  18. }, {
  19.         tabs: document.getElementById('sports').getElementsByTagName('li'),
  20.         contents: YTabs.getByClassName('cnt', 'div', 'yahooskin'),
  21.         evt: 'click',
  22.         defaultClass: 'first',
  23.         previousClass: 'off'
  24. }, {
  25.         tabId: 'news',
  26.         tTag: 'li',
  27.         defaultIndex: 2,
  28.         contents: document.getElementById('newsCnt').getElementsByTagName('ul'),
  29.         evt: 'click'
  30. }, {
  31.         tabId: 'dishes',
  32.         tTag: 'h4',
  33.         cTag: 'p'
  34. }, {
  35.         tabId: 'cmt-list',
  36.         tTag: 'h4',
  37.         contents: YTabs.getByClassName('bd', 'div', 'cmt-list'),
  38.         defaultIndex: 1,
  39.         evt: 'click'
  40. });
复制代码
希望整理的这些东西对大家的开发有帮助!!

[ 本帖最后由 yaohaixiao 于 2009-8-21 16:53 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
已有 1 人评分威望 收起 理由
cloudgamer + 2 谢谢分享

总评分: 威望 + 2   查看全部评分

yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5637
威望
45
居住地
浙江省 杭州市
发表于 2009-6-23 19:05:08 |显示全部楼层

回复 1# yaohaixiao [自己] 的帖子

简单说下:
1、可以自定义事件--evt : 'click' || 'mouseover'
2、可以自定义默认显示标签--defaultIndex: 0~n(当然N不能超过标签的最大索引值)
3、还是跟我的划过变色一样,一次可以控制多个对象,当然你也可以一次一个,多次调用
4、可以根据标签导航的id值(tabId),设置标签容器,然后通过导航标签的XHTML标签(tTag)通过tabId.getElementsByTagName(tTag)获取所有标签,同时也可以直接通过函数获取所有的导航标签(tabs)和要显示的内容(contents)。这样基本可以适应多变的布局样式。
5、另外的一个处理,就是不需要像有些朋友的代码,每次通过遍历标签项(tabs)和内容项(contents)来设置当前标签和当前内容的样式。因为你需要设置样式只有4个(1个当前标签(currentTab),1个上次点击标签(lastTab),1个当前内容(currentContent),1个上次显示内容(lastContent))节点样式。
6、如果采用点击事件,那么我就阻止了li或这其他tab标签里链接的事件触发。而当脚本不能运行或禁用时,用户有可以点击这些链接到相应的页面,算是个向后兼容。

2009年6月26日补充说明

到今天为止一共展示出了10个标签导航的示例,应该常用的一些滑动门导航效果这里都有了。我选的这些效果都比较有代表性,实用性也强,都是我从YAHOO、MSN、淘宝、京东等这样的大站点收集整理出来的,希望对加大的开发有帮助。有空我还会更新更多的我看到的或想到的其他表现形式的实用的滑动门。呵呵,看完这些例子,可能有人会发现:“哦,原来这个效果只是一个滑动门啊!”,呵呵,其实就是这样的。只不过我们的WEB工程师们添加了动画效果,使用了更炫的表现形式。而这些东西的本质都是一样的,滑动门。至少我是这么理解的。

我想经常来这了的朋友以前肯定看到过类似的帖子,我这个帖子算是做个补充,给出了更加完整的和丰富的示例。呵呵,重点也在这里,这里的示例是可以直接运用到实际开发中的,大家应该仔细看看这些示例的XHTML代码结构和CSS的布局技巧。特别是对刚接触前端开发的朋友。

我概要的介绍些这里用到的主要两个技巧:

1、浮动元素的特性:
   A、浮动非替换元素要指定一个明确的宽度;否则,它们会尽可能地窄。
   B、按照CSS规范,浮动元素(floats)会被移出文档流,不会影响到块状盒子的布局而只会影响内联盒子(通常是文本)的排列。
      技巧:使用overflow:hidden使浮动元素的父节点获得高度
   C、假如在一行之上只有极少的空间可供浮动元素,那么这个元素会跳至下一行,这个过程会持续到某一行拥有足够的空间为止。
     (不过我的实际经验告诉我,Chorme目前会一直接在一排浮动,不会换行。一个BUG!!)
      技巧:所以为了兼容,在你需要清除浮动,希望换行的地方给改节点设置clear:both;
   D、浮动元素会生成一个块级框,而不论它本身是何种元素。
      技巧:如果你视图直接给a或span这样的行内元素设置line-height,height是不起任何作用的,但是如果给他们加上float:left/right;那么这个设置就生效了。   
   
   还有:设置了margin-left/right的浮动元素,一定要记得使用display:inline;避免IE6中出现双倍的边距
   
2、position属性和设置了relative和absolute值的元素特性:
   
   relative:元素框偏移某个距离。元素仍保持其未定位前的形状,它原本所占的空间仍保留。   
   absolute:元素框从文档流完全删除,并相对于其包含块定位。包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框

   顺便说下:这里的一个“占空间”和一个“完全删除”就好像visibility:hidden;和display:none;
   
我的最后一个示例就是充分运用float的“会被移出文档流”,absolute的“从文档流完全删除”特性达到这个布局效果的。但是不幸的是在IE6中,即使absolute的display:none,但是float的威力依然存在,还会让它之后的float元素接在它后面浮动。所以我给每个h4设置了clear:right;把它左边的display:none的含有float的absolute元素的浮动清除掉,这样它们才能显示成一行。

好了,就这么大概的介绍下,其余的大家仔细去看吧,不要只看“热闹”,要看看里面的“门道”。

哎,说道JS的封装,大家要看的,就是如何使用闭包的特性,来模拟私有变量,私有方法和公用方法,特权方法(当然我的例子里有些没有涉及到),如何运用JS的灵活的语法特点.要彻底搞清楚JS中作用域的含义,什么能够在JS中构成作用域。唉,总之虽然我的JS封装得不怎么的,看时还是有不少门道的。当然,个人能力也十分有限,有什么不对和需要提高的,也请高手谅解这指点。

[ 本帖最后由 yaohaixiao 于 2009-6-26 17:59 编辑 ]
帖子
194
体力
349
威望
0
居住地
浙江省 杭州市
发表于 2009-6-23 19:36:44 |显示全部楼层
很不错哈~搜藏了
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5637
威望
45
居住地
浙江省 杭州市
发表于 2009-6-23 19:37:56 |显示全部楼层

回复 3# cnfiowen 的帖子

希望你能用得上

太有钱

银牌会员  

帖子
564
体力
1774
威望
11
居住地
广东省 深圳市
发表于 2009-6-23 21:05:42 |显示全部楼层
很不错哈~搜藏了
失业中,8-10k找工作

蓝色弟子

银牌会员

帖子
1699
体力
1786
威望
5
发表于 2009-6-23 21:27:44 |显示全部楼层
我也收藏了,很精彩!谢谢!~
电工电器,机电设备 互换链接

电器工业经济信息网

蓝色弟子

银牌会员

帖子
1699
体力
1786
威望
5
发表于 2009-6-23 21:30:42 |显示全部楼层
楼主能不能把演示的文件打个包让我们下载啊!谢谢!
电工电器,机电设备 互换链接

电器工业经济信息网

太有钱

银牌会员  

帖子
564
体力
1774
威望
11
居住地
广东省 深圳市
发表于 2009-6-23 21:59:52 |显示全部楼层
是啊,经常要用到的,打个包好收藏哩
失业中,8-10k找工作

zerodaily

初级会员  

帖子
185
体力
146
威望
0
发表于 2009-6-23 22:43:24 |显示全部楼层
都是你的贴,顶一下~
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5637
威望
45
居住地
浙江省 杭州市
发表于 2009-6-24 09:11:43 |显示全部楼层

那我就上传了



如果有兴趣,大家也可去http://www.yaohaixiao.com/effects/index.html看看,这里放了些我整理的比较使用的一些代码。都提供下载的。
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
帖子
453
体力
2173
威望
0
发表于 2009-6-24 09:27:05 |显示全部楼层
太好了。通用类真棒
帖子
161
体力
517
威望
0
发表于 2009-6-24 09:42:42 |显示全部楼层
不错,学习
帖子
34
体力
102
威望
0
发表于 2009-6-24 10:03:20 |显示全部楼层
进来学习了 谢谢楼主提供
帖子
44
体力
876
威望
0
居住地
陕西省 西安市
发表于 2009-6-24 10:31:39 |显示全部楼层
嘻嘻,很不错的,收了!
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5637
威望
45
居住地
浙江省 杭州市
发表于 2009-6-24 12:03:23 |显示全部楼层

脚本调整了,示例里也展示二级导航菜单一个简单示例

演示地址:http://www.yaohaixiao.com/effects/samples/ytabs/



  1. var YTabs = function(){
  2.         var D = document, j, len = 0, allTabs;
  3.        
  4.         return {
  5.                 hasClass: function(elem, className){
  6.                         var has = new RegExp("(?:^|\\s+)" + className + "(?:\\s+|$)");
  7.                         return has.test(elem.className);
  8.                 },
  9.                 addClass: function(elem, className){
  10.                         if (this.hasClass(elem, className)) {
  11.                                 return;
  12.                         }
  13.                         elem.className = [elem.className, className].join(" ");
  14.                 },
  15.                 removeClass: function(elem, className){
  16.                         var replace = new RegExp("(?:^|\\s+)" + className + "(?:\\s+|$)", "g");
  17.                         if (!this.hasClass(elem, className)) {
  18.                                 return;
  19.                         }
  20.                         var o = elem.className;
  21.                         elem.className = o.replace(replace, " ");
  22.                         if (this.hasClass(elem, className)) {
  23.                                 this.removeClass(elem, className);
  24.                         }
  25.                 },
  26.                 getByClassName: function(className, tag, rootTag){
  27.                         var elems = [], i, tempCnt = document.getElementById(rootTag).getElementsByTagName(tag), len = tempCnt.length;
  28.                         for (i = 0; i < len; i++) {
  29.                                 if (YTabs.hasClass(tempCnt[i], className)) {
  30.                                         elems.push(tempCnt[i]);
  31.                                 }
  32.                         }
  33.                         if (elems.length < 1) {
  34.                                 return false;
  35.                         }
  36.                         else {
  37.                                 return elems;
  38.                         }
  39.                 },
  40.                 tabs: function(){
  41.                         len = arguments.length;
  42.                         for (j = 0; j < len; j += 1) {
  43.                                 allTabs = arguments[j];
  44.                                 (function(oTabs){
  45.                                         var i, tabCnt = (oTabs.tabId) ? D.getElementById(oTabs.tabId) : (oTabs.tabRoot || null), tabs = (oTabs.tTag) ? tabCnt.getElementsByTagName(oTabs.tTag) : (oTabs.tabs || null), contents = (oTabs.cTag) ? tabCnt.getElementsByTagName(oTabs.cTag) : (oTabs.contents || null);
  46.                                         if (tabs && contents) {
  47.                                                 var length = tabs.length, defaultIndex = oTabs.defaultIndex || 0, lastTab = tabs[defaultIndex], hideAll = oTabs.hideAll || false, lastTabClass = oTabs.lastTabClass || '', lastContent = contents[defaultIndex], evtName = oTabs.evt || 'mouseover';
  48.                                                 if(!hideAll){
  49.                                                     YTabs.addClass(lastTab, 'current');
  50.                                                     lastContent.style.display = 'block';
  51.                                           }
  52.                                                 for (i = 0; i < length; i += 1) {
  53.                                                         if (i !== defaultIndex) {
  54.                                                                 YTabs.removeClass(tabs[i], 'current');
  55.                                                                 contents[i].style.display = 'none';
  56.                                                         }
  57.                                                        
  58.                                                         tabs[i]['on' + evtName] = function(index){
  59.                                                                 return function(event){
  60.                                                                         var currentContent = contents[index];
  61.                                                                         YTabs.removeClass(lastTab, 'current');
  62.                                                                         YTabs.addClass(this, 'current');
  63.                                                                         lastContent.style.display = "none";
  64.                                                                         currentContent.style.display = "block";
  65.                                                                         lastContent = currentContent;
  66.                                                                         lastTab = this;
  67.                                                                         if (evtName === 'click') {
  68.                                                                                 var evt = event || window.event;
  69.                                                                                 if (evt.stopPropagation) {
  70.                                                                                         evt.stopPropagation();
  71.                                                                                 }
  72.                                                                                 else {
  73.                                                                                         evt.cancelBubble = true;
  74.                                                                                 }
  75.                                                                                 if (evt.preventDefault) {
  76.                                                                                         evt.preventDefault();
  77.                                                                                 }
  78.                                                                                 else {
  79.                                                                                         evt.returnValue = false;
  80.                                                                                 }
  81.                                                                         }
  82.                                                                 }
  83.                                                         }(i);
  84.                                                 }
  85.                                         }
  86.                                 })(allTabs);
  87.                         }
  88.                 }
  89.         }
  90. }();
复制代码


当然,我的这个菜单的示例只是一个很简单的例子,怎么美化和触类旁通就要大家发挥聪明才智了。还有,有位朋友问过我京东的菜单,呵呵,其实我的DEMO就是按照那个来的,不过有一点要说明,我的sub-menu只是右边的一部分,而它的是用整个sub-menu把现在的li标签覆盖,然后还包裹右边的标签,这样就可以做到mouserout了sub-menu时可以直接隐藏整个sub-menu,而我的这个只是模仿样式而已。哎,不知道说的这么抽象讲明白了没有。

[ 本帖最后由 yaohaixiao 于 2009-6-24 12:13 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
帖子
735
体力
2241
威望
0
发表于 2009-6-24 12:17:43 |显示全部楼层
yaohaixiao(姚海啸)同志。一出出精品。。搜藏了。
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5637
威望
45
居住地
浙江省 杭州市
发表于 2009-6-24 12:50:18 |显示全部楼层

回复 16# wangsdong 的帖子

嗯,谢谢支持!!!

希望对大家的开发有帮助!!!有空我再多整几个例子
帖子
436
体力
1721
威望
0
发表于 2009-6-24 17:02:44 |显示全部楼层
楼主的叶子打不开呢?
帖子
459
体力
1094
威望
0
居住地
福建省 厦门市
发表于 2009-6-24 17:35:28 |显示全部楼层
那链接貌似失效了!  不过代码收藏了 !谢谢!
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5637
威望
45
居住地
浙江省 杭州市
发表于 2009-6-24 17:50:06 |显示全部楼层

回复 19# vallkiss 的帖子

唉,上午是失效了,现在又可以访问了。
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5637
威望
45
居住地
浙江省 杭州市
发表于 2009-6-24 17:52:54 |显示全部楼层

回复 20# yaohaixiao [自己] 的帖子

TMD,又挂了!!
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5637
威望
45
居住地
浙江省 杭州市
发表于 2009-6-24 18:32:08 |显示全部楼层

回复 21# yaohaixiao [自己] 的帖子

有折腾了下,代码小小的改了点,有整了个导航菜单的调用,也很使用的。



http://www.yaohaixiao.com/effects/samples/ytabs/(NND,我的那个BLOG似乎又可以访问了)

  1. var YTabs = function(){
  2.         var D = document, j, len = 0, allTabs;
  3.        
  4.         return {
  5.                 stopEvent: function(evt){
  6.                         this.stopPropagation(evt);
  7.                         this.preventDefault(evt);
  8.                 },
  9.                 stopPropagation: function(evt){
  10.                         if (evt.stopPropagation) {
  11.                                 evt.stopPropagation();
  12.                         }
  13.                         else {
  14.                                 evt.cancelBubble = true;
  15.                         }
  16.                 },
  17.                 preventDefault: function(evt){
  18.                         if (evt.preventDefault) {
  19.                                 evt.preventDefault();
  20.                         }
  21.                         else {
  22.                                 evt.returnValue = false;
  23.                         }
  24.                 },
  25.                 hasClass: function(elem, className){
  26.                         var has = new RegExp("(?:^|\\s+)" + className + "(?:\\s+|$)");
  27.                         return has.test(elem.className);
  28.                 },
  29.                 addClass: function(elem, className){
  30.                         if (this.hasClass(elem, className)) {
  31.                                 return;
  32.                         }
  33.                         elem.className = [elem.className, className].join(" ");
  34.                 },
  35.                 removeClass: function(elem, className){
  36.                         var replace = new RegExp("(?:^|\\s+)" + className + "(?:\\s+|$)", "g");
  37.                         if (!this.hasClass(elem, className)) {
  38.                                 return;
  39.                         }
  40.                         var o = elem.className;
  41.                         elem.className = o.replace(replace, " ");
  42.                         if (this.hasClass(elem, className)) {
  43.                                 this.removeClass(elem, className);
  44.                         }
  45.                 },
  46.                 getByClassName: function(className, tag, rootTag){
  47.                         var elems = [], i, tempCnt = document.getElementById(rootTag).getElementsByTagName(tag), len = tempCnt.length;
  48.                         for (i = 0; i < len; i++) {
  49.                                 if (YTabs.hasClass(tempCnt[i], className)) {
  50.                                         elems.push(tempCnt[i]);
  51.                                 }
  52.                         }
  53.                         if (elems.length < 1) {
  54.                                 return false;
  55.                         }
  56.                         else {
  57.                                 return elems;
  58.                         }
  59.                 },
  60.                 tabs: function(){
  61.                         len = arguments.length;
  62.                         for (j = 0; j < len; j += 1) {
  63.                                 allTabs = arguments[j];
  64.                                 (function(oTabs){
  65.                                         var i, tabCnt = (oTabs.tabId) ? D.getElementById(oTabs.tabId) : (oTabs.tabRoot || null), tabs = (oTabs.tTag) ? tabCnt.getElementsByTagName(oTabs.tTag) : (oTabs.tabs || null), contents = (oTabs.cTag) ? tabCnt.getElementsByTagName(oTabs.cTag) : (oTabs.contents || null);
  66.                                         if (tabs && contents) {
  67.                                                 var length = tabs.length, defaultIndex = oTabs.defaultIndex || 0, lastTab = tabs[defaultIndex], hideAll = oTabs.hideAll || false, lastTabClass = oTabs.lastTabClass || '', lastContent = contents[defaultIndex], evtName = oTabs.evt || 'mouseover';
  68.                                                 if (!hideAll) {
  69.                                                         YTabs.addClass(lastTab, 'current');
  70.                                                         lastContent.style.display = 'block';
  71.                                                 }
  72.                                                 for (i = 0; i < length; i += 1) {
  73.                                                         if (i !== defaultIndex) {
  74.                                                                 YTabs.removeClass(tabs[i], 'current');
  75.                                                                 contents[i].style.display = 'none';
  76.                                                         }
  77.                                                        
  78.                                                         tabs[i]['on' + evtName] = function(index){
  79.                                                                 return function(event){
  80.                                                                         var currentContent = contents[index];
  81.                                                                         YTabs.removeClass(lastTab, 'current');
  82.                                                                         YTabs.addClass(this, 'current');
  83.                                                                         lastContent.style.display = "none";
  84.                                                                         currentContent.style.display = "block";
  85.                                                                         lastContent = currentContent;
  86.                                                                         lastTab = this;
  87.                                                                         if (evtName === 'click') {
  88.                                                                                 var evt = event || window.event;
  89.                                                                                 YTabs.stopEvent(evt);
  90.                                                                         }
  91.                                                                 }
  92.                                                         }(i);
  93.                                                 }
  94.                                         }
  95.                                 })(allTabs);
  96.                         }
  97.                 }
  98.         }
  99. }();
复制代码

[ 本帖最后由 yaohaixiao 于 2009-6-24 18:39 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
帖子
273
体力
106
威望
0
居住地
浙江省 杭州市
发表于 2009-6-24 20:14:44 |显示全部楼层
不错的效果
帖子
251
体力
1115
威望
0
居住地
辽宁省 盘锦市
发表于 2009-6-25 08:33:32 |显示全部楼层
强悍
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5637
威望
45
居住地
浙江省 杭州市
发表于 2009-6-25 09:28:29 |显示全部楼层

回复 24# chuhongbin 的帖子



演示地址:http://www.yaohaixiao.com/effects/samples/ytabs/

呵呵,又加了个常用的字符菜单的示例,也是很实用,现在代码又更新了下

  1. var YTabs = function(){
  2.         var D = document, j, len = 0, allTabs;
  3.        
  4.         return {
  5.                 stopEvent: function(evt){
  6.                         this.stopPropagation(evt);
  7.                         this.preventDefault(evt);
  8.                 },
  9.                 stopPropagation: function(evt){
  10.                         if (evt.stopPropagation) {
  11.                                 evt.stopPropagation();
  12.                         }
  13.                         else {
  14.                                 evt.cancelBubble = true;
  15.                         }
  16.                 },
  17.                 preventDefault: function(evt){
  18.                         if (evt.preventDefault) {
  19.                                 evt.preventDefault();
  20.                         }
  21.                         else {
  22.                                 evt.returnValue = false;
  23.                         }
  24.                 },
  25.                 hasClass: function(elem, className){
  26.                         var has = new RegExp("(?:^|\\s+)" + className + "(?:\\s+|$)");
  27.                         return has.test(elem.className);
  28.                 },
  29.                 addClass: function(elem, className){
  30.                         if (this.hasClass(elem, className)) {
  31.                                 return;
  32.                         }
  33.                         elem.className = [elem.className, className].join(" ");
  34.                 },
  35.                 removeClass: function(elem, className){
  36.                         var replace = new RegExp("(?:^|\\s+)" + className + "(?:\\s+|$)", "g");
  37.                         if (!this.hasClass(elem, className)) {
  38.                                 return;
  39.                         }
  40.                         var o = elem.className;
  41.                         elem.className = o.replace(replace, " ");
  42.                         if (this.hasClass(elem, className)) {
  43.                                 this.removeClass(elem, className);
  44.                         }
  45.                 },
  46.                 getByClassName: function(className, tag, rootTag){
  47.                         var elems = [], i, tempCnt = document.getElementById(rootTag).getElementsByTagName(tag), len = tempCnt.length;
  48.                         for (i = 0; i < len; i++) {
  49.                                 if (YTabs.hasClass(tempCnt[i], className)) {
  50.                                         elems.push(tempCnt[i]);
  51.                                 }
  52.                         }
  53.                         if (elems.length < 1) {
  54.                                 return false;
  55.                         }
  56.                         else {
  57.                                 return elems;
  58.                         }
  59.                 },
  60.                 tabs: function(){
  61.                         len = arguments.length;
  62.                         for (j = 0; j < len; j += 1) {
  63.                                 allTabs = arguments[j];
  64.                                 (function(oTabs){
  65.                                         var i, tabCnt = (oTabs.tabId) ? D.getElementById(oTabs.tabId) : (oTabs.tabRoot || null), tabs = (oTabs.tTag) ? tabCnt.getElementsByTagName(oTabs.tTag) : (oTabs.tabs || null), contents = (oTabs.cTag) ? tabCnt.getElementsByTagName(oTabs.cTag) : (oTabs.contents || null);
  66.                                         if (tabs && contents) {
  67.                                                 var length = tabs.length, defaultClass = oTabs.defaultClass || 'current', defaultIndex = oTabs.defaultIndex || 0, lastTab = tabs[defaultIndex], hideAll = oTabs.hideAll || false, lastTabClass = oTabs.lastTabClass || '', lastContent = contents[defaultIndex], previousClass = (oTabs.previousClass || ''), previousClassTab = null, evtName = oTabs.evt || 'mouseover';
  68.                                                 if (!hideAll) {
  69.                                                         YTabs.addClass(lastTab, defaultClass);
  70.                                                         lastContent.style.display = 'block';
  71.                                                 }
  72.                                                 else {
  73.                                                         YTabs.removeClass(lastTab, defaultClass);
  74.                                                         lastContent.style.display = 'none';
  75.                                                 }
  76.                                                 for (i = 0; i < length; i += 1) {
  77.                                                         if (i !== defaultIndex) {
  78.                                                                 YTabs.removeClass(tabs[i], 'current');
  79.                                                                 contents[i].style.display = 'none';
  80.                                                         }
  81.                                                        
  82.                                                         tabs[i]['on' + evtName] = function(index){
  83.                                                                 return function(event){
  84.                                                                         var currentContent = contents[index];
  85.                                                                         YTabs.removeClass(lastTab, 'current');
  86.                                                                         if (this === tabs[defaultIndex]) {
  87.                                                                                 YTabs.addClass(this, defaultClass);
  88.                                                                         }
  89.                                                                         else {
  90.                                                                                 YTabs.addClass(this, 'current');
  91.                                                                         }
  92.                                                                         if (index !== 0 && previousClass) {
  93.                                                                                 if (previousClassTab) {
  94.                                                                                         YTabs.removeClass(previousClassTab, previousClass);
  95.                                                                                 }
  96.                                                                                 YTabs.addClass(tabs[index - 1], previousClass);
  97.                                                                                 if ((index - 1) === defaultIndex) {
  98.                                                                                         YTabs.removeClass(tabs[index - 1], defaultClass);
  99.                                                                                 }
  100.                                                                                 previousClassTab = (tabs[index - 1]);
  101.                                                                         }
  102.                                                                         lastContent.style.display = "none";
  103.                                                                         currentContent.style.display = "block";
  104.                                                                         lastContent = currentContent;
  105.                                                                         lastTab = this;
  106.                                                                         if (evtName === 'click') {
  107.                                                                                 var evt = event || window.event;
  108.                                                                                 YTabs.stopEvent(evt);
  109.                                                                         }
  110.                                                                 }
  111.                                                         }(i);
  112.                                                         if (hideAll && evtName === 'mouseover') {
  113.                                                                 tabs[i]['onmouseout'] = function(index){
  114.                                                                         return function(){
  115.                                                                                 if (previousClassTab) {
  116.                                                                                         YTabs.removeClass(previousClassTab, previousClass);
  117.                                                                                 }
  118.                                                                                 contents[index].style.display = 'none';
  119.                                                                         }
  120.                                                                 }(i);
  121.                                                         }
  122.                                                 }
  123.                                         }
  124.                                 })(allTabs);
  125.                         }
  126.                 }
  127.         }
  128. }();
复制代码


有添加了定义默认标签特殊样式和针对我自己做的YAHOO的皮肤的TAB导航的一个特殊样式的处理。哎,功能越来越多,现在的这个封装好像比较牵强了点。不过我就一般的标签导航,这么写还凑活,我稍候也会再调整下代码结构。目前主要是把常用的标签导航样式展示给大家,其实大家更应该看看CSS的写法和XHTML的布局。当然,能力有限,有什么欠妥,也请高手指点。

[ 本帖最后由 yaohaixiao 于 2009-6-25 09:29 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

不死鸟人

银牌会员  

帖子
288
体力
1220
威望
0
居住地
广东省 广州市
发表于 2009-6-25 10:15:36 |显示全部楼层
很实用的东西,收藏了
有得有失
帖子
104
体力
53
威望
0
发表于 2009-6-25 10:31:11 |显示全部楼层
确实很好看的效果,学习了
37moti.com
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5637
威望
45
居住地
浙江省 杭州市
发表于 2009-6-25 11:37:54 |显示全部楼层

回复 27# freegreen 的帖子

能对大家开发有帮助就好,我有空会继续更新的
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5637
威望
45
居住地
浙江省 杭州市
发表于 2009-6-25 14:31:13 |显示全部楼层

修复了下,YAHOO皮肤TAB的一个JS小BUG

  1. var YTabs = function(){
  2.         var D = document, j, len = 0, allTabs;
  3.        
  4.         return {
  5.                 stopEvent: function(evt){
  6.                         this.stopPropagation(evt);
  7.                         this.preventDefault(evt);
  8.                 },
  9.                 stopPropagation: function(evt){
  10.                         if (evt.stopPropagation) {
  11.                                 evt.stopPropagation();
  12.                         }
  13.                         else {
  14.                                 evt.cancelBubble = true;
  15.                         }
  16.                 },
  17.                 preventDefault: function(evt){
  18.                         if (evt.preventDefault) {
  19.                                 evt.preventDefault();
  20.                         }
  21.                         else {
  22.                                 evt.returnValue = false;
  23.                         }
  24.                 },
  25.                 hasClass: function(elem, className){
  26.                         var has = new RegExp("(?:^|\\s+)" + className + "(?:\\s+|$)");
  27.                         return has.test(elem.className);
  28.                 },
  29.                 addClass: function(elem, className){
  30.                         if (this.hasClass(elem, className)) {
  31.                                 return;
  32.                         }
  33.                         elem.className = [elem.className, className].join(" ");
  34.                 },
  35.                 removeClass: function(elem, className){
  36.                         var replace = new RegExp("(?:^|\\s+)" + className + "(?:\\s+|$)", "g");
  37.                         if (!this.hasClass(elem, className)) {
  38.                                 return;
  39.                         }
  40.                         var o = elem.className;
  41.                         elem.className = o.replace(replace, " ");
  42.                         if (this.hasClass(elem, className)) {
  43.                                 this.removeClass(elem, className);
  44.                         }
  45.                 },
  46.                 getByClassName: function(className, tag, rootTag){
  47.                         var elems = [], i, tempCnt = document.getElementById(rootTag).getElementsByTagName(tag), len = tempCnt.length;
  48.                         for (i = 0; i < len; i++) {
  49.                                 if (YTabs.hasClass(tempCnt[i], className)) {
  50.                                         elems.push(tempCnt[i]);
  51.                                 }
  52.                         }
  53.                         if (elems.length < 1) {
  54.                                 return false;
  55.                         }
  56.                         else {
  57.                                 return elems;
  58.                         }
  59.                 },
  60.                 tabs: function(){
  61.                         len = arguments.length;
  62.                         for (j = 0; j < len; j += 1) {
  63.                                 allTabs = arguments[j];
  64.                                 (function(oTabs){
  65.                                         var i, tabCnt = (oTabs.tabId) ? D.getElementById(oTabs.tabId) : (oTabs.tabRoot || null), tabs = (oTabs.tTag) ? tabCnt.getElementsByTagName(oTabs.tTag) : (oTabs.tabs || null), contents = (oTabs.cTag) ? tabCnt.getElementsByTagName(oTabs.cTag) : (oTabs.contents || null);
  66.                                         if (tabs && contents) {
  67.                                                 var length = tabs.length, defaultClass = oTabs.defaultClass || 'current', defaultIndex = oTabs.defaultIndex || 0, lastTab = tabs[defaultIndex], hideAll = oTabs.hideAll || false, lastTabClass = oTabs.lastTabClass || '', lastContent = contents[defaultIndex], previousClass = (oTabs.previousClass || ''), previousClassTab = null, evtName = oTabs.evt || 'mouseover';
  68.                                                 if(!hideAll){
  69.                             YTabs.addClass(lastTab, defaultClass);
  70.                             lastContent.style.display = 'block';
  71.                         }
  72.                                                 else{
  73.                             YTabs.removeClass(lastTab, defaultClass);
  74.                             lastContent.style.display = 'none';
  75.                                                 }
  76.                                                 for (i = 0; i < length; i += 1) {
  77.                                                         if (i !== defaultIndex) {
  78.                                                                 YTabs.removeClass(tabs[i], 'current');
  79.                                                                 contents[i].style.display = 'none';
  80.                                                         }
  81.                                                        
  82.                                                         tabs[i]['on' + evtName] = function(index){
  83.                                                                 return function(event){
  84.                                                                         var currentContent = contents[index];
  85.                                                                         YTabs.removeClass(lastTab, (YTabs.hasClass(lastTab, defaultClass) ? defaultClass : 'current'));
  86.                                                                         if (this === tabs[defaultIndex]) {
  87.                                                                             YTabs.addClass(this, defaultClass);
  88.                                                                         }
  89.                                                                         else {
  90.                                                                                 YTabs.addClass(this, 'current');
  91.                                                                         }
  92.                                                                         if(index!==0 && previousClass){
  93.                                                                                 if (previousClassTab) {
  94.                                                                                         YTabs.removeClass(previousClassTab, previousClass);
  95.                                                                                 }
  96.                                                                                 YTabs.addClass(tabs[index-1], previousClass);
  97.                                                                                 if((index-1)===defaultIndex){
  98.                                                                                         YTabs.removeClass(tabs[index-1], defaultClass);
  99.                                                                                 }
  100.                                                                                 previousClassTab = (tabs[index-1]);
  101.                                                                         }
  102.                                                                         lastContent.style.display = "none";
  103.                                                                         currentContent.style.display = "block";
  104.                                                                         lastContent = currentContent;
  105.                                                                         lastTab = this;
  106.                                                                         if (evtName === 'click') {
  107.                                                                                 var evt = event || window.event;
  108.                                                                                 YTabs.stopEvent(evt);
  109.                                                                         }
  110.                                                                 }
  111.                                                         }(i);
  112.                                                         if(hideAll && evtName === 'mouseover'){
  113.                                                                 tabs[i]['onmouseout'] = function(index){
  114.                                 return function(){
  115.                                                                         if (previousClassTab) {
  116.                                                                                         YTabs.removeClass(previousClassTab, previousClass);
  117.                                                                         }
  118.                                     contents[index].style.display = 'none';
  119.                                 }
  120.                                 }(i);
  121.                                                         }
  122.                                                 }
  123.                                         }
  124.                                 })(allTabs);
  125.                         }
  126.                 }
  127.         }
  128. }();
复制代码
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5637
威望
45
居住地
浙江省 杭州市
发表于 2009-6-25 15:24:34 |显示全部楼层

修复了下YAHOO皮肤标签的一个小BUG

  1. var YTabs = function(){
  2.         var D = document;
  3.        
  4.         return {
  5.                 stopEvent: function(evt){
  6.                         this.stopPropagation(evt);
  7.                         this.preventDefault(evt);
  8.                 },
  9.                 stopPropagation: function(evt){
  10.                         if (evt.stopPropagation) {
  11.                                 evt.stopPropagation();
  12.                         }
  13.                         else {
  14.                                 evt.cancelBubble = true;
  15.                         }
  16.                 },
  17.                 preventDefault: function(evt){
  18.                         if (evt.preventDefault) {
  19.                                 evt.preventDefault();
  20.                         }
  21.                         else {
  22.                                 evt.returnValue = false;
  23.                         }
  24.                 },
  25.                 hasClass: function(elem, className){
  26.                         var has = new RegExp("(?:^|\\s+)" + className + "(?:\\s+|$)");
  27.                         return has.test(elem.className);
  28.                 },
  29.                 addClass: function(elem, className){
  30.                         if (this.hasClass(elem, className)) {
  31.                                 return;
  32.                         }
  33.                         elem.className = [elem.className, className].join(" ");
  34.                 },
  35.                 removeClass: function(elem, className){
  36.                         var replace = new RegExp("(?:^|\\s+)" + className + "(?:\\s+|$)", "g");
  37.                         if (!this.hasClass(elem, className)) {
  38.                                 return;
  39.                         }
  40.                         var o = elem.className;
  41.                         elem.className = o.replace(replace, " ");
  42.                         if (this.hasClass(elem, className)) {
  43.                                 this.removeClass(elem, className);
  44.                         }
  45.                 },
  46.                 getByClassName: function(className, tag, rootTag){
  47.                         var elems = [], i, tempCnt = document.getElementById(rootTag).getElementsByTagName(tag), len = tempCnt.length;
  48.                         for (i = 0; i < len; i++) {
  49.                                 if (YTabs.hasClass(tempCnt[i], className)) {
  50.                                         elems.push(tempCnt[i]);
  51.                                 }
  52.                         }
  53.                         if (elems.length < 1) {
  54.                                 return false;
  55.                         }
  56.                         else {
  57.                                 return elems;
  58.                         }
  59.                 },
  60.                 tabs: function(){
  61.                         var j, len = arguments.length, allTabs;
  62.                         for (j = 0; j < len; j += 1) {
  63.                                 allTabs = arguments[j];
  64.                                 (function(oTabs){
  65.                                         var i, tabCnt = (oTabs.tabId) ? D.getElementById(oTabs.tabId) : (oTabs.tabRoot || null), tabs = (oTabs.tTag) ? tabCnt.getElementsByTagName(oTabs.tTag) : (oTabs.tabs || null), contents = (oTabs.cTag) ? tabCnt.getElementsByTagName(oTabs.cTag) : (oTabs.contents || null);
  66.                                         if (tabs && contents) {
  67.                                                 var length = tabs.length, defaultClass = oTabs.defaultClass || 'current', defaultIndex = oTabs.defaultIndex || 0, lastTab = tabs[defaultIndex], hideAll = oTabs.hideAll || false, lastTabClass = oTabs.lastTabClass || '', lastContent = contents[defaultIndex], previousClass = (oTabs.previousClass || ''), previousClassTab = null, evtName = oTabs.evt || 'mouseover';
  68.                                                 if(!hideAll){
  69.                             YTabs.addClass(lastTab, defaultClass);
  70.                             lastContent.style.display = 'block';
  71.                         }
  72.                                                 else{
  73.                             YTabs.removeClass(lastTab, defaultClass);
  74.                             lastContent.style.display = 'none';
  75.                                                 }
  76.                                                 for (i = 0; i < length; i += 1) {
  77.                                                         if (i !== defaultIndex) {
  78.                                                                 YTabs.removeClass(tabs[i], 'current');
  79.                                                                 contents[i].style.display = 'none';
  80.                                                         }
  81.                                                        
  82.                                                         tabs[i]['on' + evtName] = function(index){
  83.                                                                 return function(event){
  84.                                                                         var currentContent = contents[index];
  85.                                                                         YTabs.removeClass(lastTab, (YTabs.hasClass(lastTab, defaultClass) ? defaultClass : 'current'));
  86.                                                                         if (this === tabs[defaultIndex]) {
  87.                                                                             YTabs.addClass(this, defaultClass);
  88.                                                                         }
  89.                                                                         else {
  90.                                                                                 YTabs.addClass(this, 'current');
  91.                                                                         }
  92.                                                                         if(index!==0 && previousClass){
  93.                                                                                 if (previousClassTab) {
  94.                                                                                         YTabs.removeClass(previousClassTab, previousClass);
  95.                                                                                 }
  96.                                                                                 YTabs.addClass(tabs[index-1], previousClass);
  97.                                                                                 if((index-1)===defaultIndex){
  98.                                                                                         YTabs.removeClass(tabs[index-1], defaultClass);
  99.                                                                                 }
  100.                                                                                 previousClassTab = (tabs[index-1]);
  101.                                                                         }
  102.                                                                         lastContent.style.display = "none";
  103.                                                                         currentContent.style.display = "block";
  104.                                                                         lastContent = currentContent;
  105.                                                                         lastTab = this;
  106.                                                                         if (evtName === 'click') {
  107.                                                                                 var evt = event || window.event;
  108.                                                                                 YTabs.stopEvent(evt);
  109.                                                                         }
  110.                                                                 }
  111.                                                         }(i);
  112.                                                         if(hideAll && evtName === 'mouseover'){
  113.                                                                 tabs[i]['onmouseout'] = function(index){
  114.                                 return function(){
  115.                                                                         if (previousClassTab) {
  116.                                                                                         YTabs.removeClass(previousClassTab, previousClass);
  117.                                                                         }
  118.                                     contents[index].style.display = 'none';
  119.                                 }
  120.                                 }(i);
  121.                                                         }
  122.                                                 }
  123.                                         }
  124.                                 })(allTabs);
  125.                         }
  126.                 }
  127.         }
  128. }();
复制代码
您需要登录后才可以回帖 登录 | 注册


Archiver|手机版|blueidea.com ( 京ICP备05002321号 )    

GMT+8, 2012-5-22 17:27 , Processed in 0.139400 second(s), 8 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部