请选择 进入手机版 | 继续访问电脑版

 找回密码
 注册

只需一步,快速开始

蓝色理想 最新研发动态 用悬赏 三天解决问题 测测你的龙年运势 地图任务一定要做 - 给官方提建议

论坛活动及任务 归纳网站最新活动 地图和邮件任务 朋友们,22岁那年,你在做啥?

写书评、邀请阅读赢精品图书! 想加薪?!蓝色理想招聘提供你更多机会 万元奖励等你拿——点点网模板设计大赛

楼主: yaohaixiao

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

yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5636
威望
45
居住地
浙江省 杭州市
发表于 2009-7-7 16:48:17 |显示全部楼层

YTabs 划过显示图片导航单个程序打包



程序打包:

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

会武术的科学家

实习版主

帖子
2057
体力
5636
威望
45
居住地
浙江省 杭州市
发表于 2009-7-7 17:22:17 |显示全部楼层

YTabs 普通圆角标签导航单个程序打包



程序打包:

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

会武术的科学家

实习版主

帖子
2057
体力
5636
威望
45
居住地
浙江省 杭州市
发表于 2009-7-7 17:30:57 |显示全部楼层

所有的示例都单独打包了,现在大家喜欢哪个就自己下载吧

稍候我会写点简单的API,还有继续添加示例和优化代码,希望这个小程序对大加的开发有所帮助。
帖子
3
体力
18
威望
0
发表于 2009-7-8 08:40:36 |显示全部楼层
姚大侠的作品都是精品!
帖子
19
体力
89
威望
0
发表于 2009-7-8 10:11:57 |显示全部楼层
楼主真强!!
帖子
14
体力
48
威望
0
居住地
河南省 郑州市
发表于 2009-7-8 10:22:35 |显示全部楼层
太乱了啊,,,看不明白  http://www.guanggaoji086.com
帖子
3
体力
11
威望
0
发表于 2009-7-8 10:31:24 |显示全部楼层
太好了。非常感谢
帖子
495
体力
1297
威望
0
居住地
广东省 深圳市
发表于 2009-7-8 15:08:25 |显示全部楼层
楼主很伟大~!
好人一个
帖子
10
体力
30
威望
0
发表于 2009-7-8 17:14:33 |显示全部楼层
收藏了。非常感谢
帖子
202
体力
1564
威望
0
居住地
广东省 深圳市
发表于 2009-7-8 22:22:54 |显示全部楼层
非常感谢姚同志  经常看你的blog  给了我很大帮助...谢谢.
饥寒交迫.
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5636
威望
45
居住地
浙江省 杭州市
发表于 2009-7-9 09:13:02 |显示全部楼层

回复 130# shadowhuan 的帖子

谢谢支持啊!!

亿富豪

金牌会员

帖子
821
体力
4726
威望
0
居住地
辽宁省 大连市
发表于 2009-7-9 09:19:48 |显示全部楼层
不错,好东东
帖子
80
体力
361
威望
0
居住地
广东省 深圳市
发表于 2009-7-9 10:51:10 |显示全部楼层
用了!!非常不错,在FF下也没问题
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5636
威望
45
居住地
浙江省 杭州市
发表于 2009-7-9 11:41:47 |显示全部楼层

Windows XP下的Nescape9.0,Safari3.4~4,Firefox3.0.11,IE6~8,Chrome2.0.172,Opera9.64

这些浏览器下都测试过,CSS和JS都兼容的.执行的效率也用FIREBUG测试过,也还算可以。

主流男生

高级会员

帖子
1742
体力
509
威望
0
居住地
辽宁省 大连市
发表于 2009-7-9 12:20:22 |显示全部楼层
楼主是个大好人。。
蓝色海岸线
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5636
威望
45
居住地
浙江省 杭州市
发表于 2009-7-9 18:31:15 |显示全部楼层

YTabs 自动横向滚动切换显示标签单个程序打包

今天有位网友找我要类似的效果,于是就把我的YTabs 扩展了下,整了一个,效果还不错,看看吧!!



程序下载:
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5636
威望
45
居住地
浙江省 杭州市
发表于 2009-7-9 19:29:17 |显示全部楼层

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

添加这个特效的时候,发现我的以前的代码有个BUG,我把滚动的横向滚动finalX写成了finalY了。

完整的代码:

  1. var YAO = function(){
  2.         var A = '[object Array]', D = document, IE = navigator.userAgent.match(/MSIE\s([^;]*)/), nt = "nodeType", OP = Object.prototype;
  3.        
  4.         return {
  5.                 isArray: function(s){
  6.                         return OP.toString.apply(s) === A;
  7.                 },
  8.                 isString: function(s){
  9.                         return typeof s === 'string';
  10.                 },
  11.                 stopEvent: function(evt){
  12.                         this.stopPropagation(evt);
  13.                         this.preventDefault(evt);
  14.                 },
  15.                 stopPropagation: function(evt){
  16.                         if (evt.stopPropagation) {
  17.                                 evt.stopPropagation();
  18.                         }
  19.                         else {
  20.                                 evt.cancelBubble = true;
  21.                         }
  22.                 },
  23.                 preventDefault: function(evt){
  24.                         if (evt.preventDefault) {
  25.                                 evt.preventDefault();
  26.                         }
  27.                         else {
  28.                                 evt.returnValue = false;
  29.                         }
  30.                 },
  31.                 get: function(elem){
  32.                         var elemID, E, m, i, k, length, len;
  33.                         if (elem) {
  34.                                 if (elem[nt] || elem.item) {
  35.                                         return elem;
  36.                                 }
  37.                                 if (YAO.isString(elem)) {
  38.                                         elemID = elem;
  39.                                         elem = D.getElementById(elem);
  40.                                         if (elem && elem.id === elemID) {
  41.                                                 return elem;
  42.                                         }
  43.                                         else {
  44.                                                 if (elem && elem.all) {
  45.                                                         elem = null;
  46.                                                         E = D.all[elemID];
  47.                                                         for (i = 0, len = E.length; i < len; i += 1) {
  48.                                                                 if (E[i].id === elemID) {
  49.                                                                         return E[i];
  50.                                                                 }
  51.                                                         }
  52.                                                 }
  53.                                         }
  54.                                         return elem;
  55.                                 }
  56.                                 else {
  57.                                         if (elem.DOM_EVENTS) {
  58.                                                 elem = elem.get("element");
  59.                                         }
  60.                                         else {
  61.                                                 if (YAO.isArray(elem)) {
  62.                                                         m = [];
  63.                                                         for (k = 0, length = elem.length; k < length; k += 1) {
  64.                                                                 m[m.length] = YAO.get(elem[k]);
  65.                                                         }
  66.                                                         return m;
  67.                                                 }
  68.                                         }
  69.                                 }
  70.                         }
  71.                         return null;
  72.                 },
  73.                 hasClass: function(elem, className){
  74.                         var has = new RegExp("(?:^|\\s+)" + className + "(?:\\s+|$)");
  75.                         return has.test(elem.className);
  76.                 },
  77.                 addClass: function(elem, className){
  78.                         if (this.hasClass(elem, className)) {
  79.                                 return;
  80.                         }
  81.                         elem.className = [elem.className, className].join(" ");
  82.                 },
  83.                 removeClass: function(elem, className){
  84.                         var replace = new RegExp("(?:^|\\s+)" + className + "(?:\\s+|$)", "g");
  85.                         if (!this.hasClass(elem, className)) {
  86.                                 return;
  87.                         }
  88.                         var o = elem.className;
  89.                         elem.className = o.replace(replace, " ");
  90.                         if (this.hasClass(elem, className)) {
  91.                                 this.removeClass(elem, className);
  92.                         }
  93.                 },
  94.                 replaceClass: function(m, k, j){
  95.                         if (k === j) {
  96.                                 return false;
  97.                         }
  98.                         var l = new RegExp("(?:^|\\s+)" + k + "(?:\\s+|$)", "g");
  99.                         if (!this.hasClass(m, k)) {
  100.                                 this.addClass(m, j);
  101.                                 return;
  102.                         }
  103.                         m.className = m.className.replace(l, " " + j + " ");
  104.                         if (this.hasClass(m, k)) {
  105.                                 this.replaceClass(m, k, j);
  106.                         }
  107.                 },
  108.                 getByClassName: function(className, tag, rootTag){
  109.                         var elems = [], i, tempCnt = D.getElementById(rootTag).getElementsByTagName(tag), len = tempCnt.length;
  110.                         for (i = 0; i < len; i++) {
  111.                                 if (YAO.hasClass(tempCnt[i], className)) {
  112.                                         elems.push(tempCnt[i]);
  113.                                 }
  114.                         }
  115.                         if (elems.length < 1) {
  116.                                 return false;
  117.                         }
  118.                         else {
  119.                                 return elems;
  120.                         }
  121.                 },
  122.                 setOpacity: function(el, val){
  123.                         if (IE) {
  124.                                 if (YAO.isString(el.style.filter)) {
  125.                                         el.style.filter = 'alpha(opacity=' + val * 100 + ')';
  126.                                         if (!el.currentStyle || !el.currentStyle.hasLayout) {
  127.                                                 el.style.zoom = 1;
  128.                                         }
  129.                                 }
  130.                         }
  131.                         else {
  132.                                 el.style['opacity'] = val;
  133.                         }
  134.                 },
  135.                 YTabs: function(){
  136.                         var j, len = arguments.length, sigleTab = [];
  137.                         for (j = 0; j < len; ++j) {
  138.                                 sigleTab[j] = new YAO.simpleTab(arguments[j]);
  139.                         }
  140.                 },
  141.                 fadeUp: function(elem){
  142.                         if (elem) {
  143.                                 var level = 0, fade = function(){
  144.                                         var timer = null;
  145.                                         level += 0.05;
  146.                                         if (timer) {
  147.                                                 clearTimeout(timer);
  148.                                                 timer = null;
  149.                                         }
  150.                                         if (level > 1) {
  151.                                                 YAO.setOpacity(elem, 1);
  152.                                                 return false;
  153.                                         }
  154.                                         else {
  155.                                                 YAO.setOpacity(elem, level);
  156.                                         }
  157.                                         timer = setTimeout(fade, 50);
  158.                                 };
  159.                                 fade();
  160.                         }
  161.                 },
  162.                 zebra: function(){
  163.                         var j, length = arguments.length;
  164.                         for (j = 0; j < length; ++j) {
  165.                                 (function(config){
  166.                                         var root = YAO.get(config.rootTag) || (config.root || null), rows = root.getElementsByTagName(config.rowTag) || (config.rows || null), i, len = rows.length, lastClass = '';
  167.                                         if (root && rows && len > 1) {
  168.                                                 for (var i = 0; i < len; ++i) {
  169.                                                         rows[i].className = i % 2 == 0 ? 'even' : 'odd';
  170.                                                         rows[i].onmouseover = function(){
  171.                                                                 lastClass = this.className;
  172.                                                                 YAO.replaceClass(this, lastClass, 'hover');
  173.                                                         };
  174.                                                         rows[i].onmouseout = function(){
  175.                                                                 YAO.replaceClass(this, 'hover', lastClass);
  176.                                                         };
  177.                                                 }
  178.                                         }
  179.                                         else {
  180.                                                 return false;
  181.                                         }
  182.                                 })(arguments[j]);
  183.                         }
  184.                 },
  185.                 moveElement: function(element, finalX, finalY, speed){
  186.                         var elem = YAO.isString(element) ? YAO.get(element) : element, style = null;
  187.                         if (elem) {
  188.                                 if (elem.movement) {
  189.                                         clearTimeout(elem.movement);
  190.                                 }
  191.                                 if (!elem.style.left) {
  192.                                         elem.style.left = "0";
  193.                                 }
  194.                                 if (!elem.style.top) {
  195.                                         elem.style.top = "0";
  196.                                 }
  197.                                 var xpos = parseInt(elem.style.left);
  198.                                 var ypos = parseInt(elem.style.top);
  199.                                 if (xpos == finalX && ypos == finalY) {
  200.                                         return true;
  201.                                 }
  202.                                 if (xpos < finalX) {
  203.                                         var dist = Math.ceil((finalX - xpos) / 10);
  204.                                         xpos = xpos + dist;
  205.                                 }
  206.                                 if (xpos > finalX) {
  207.                                         var dist = Math.ceil((xpos - finalX) / 10);
  208.                                         xpos = xpos - dist;
  209.                                 }
  210.                                 if (ypos < finalY) {
  211.                                         var dist = Math.ceil((finalY - ypos) / 10);
  212.                                         ypos = ypos + dist;
  213.                                 }
  214.                                 if (ypos > finalY) {
  215.                                         var dist = Math.ceil((ypos - finalY) / 10);
  216.                                         ypos = ypos - dist;
  217.                                 }
  218.                                 elem.style.left = xpos + "px";
  219.                                 elem.style.top = ypos + "px";
  220.                                 elem.movement = setTimeout(function(){
  221.                                         YAO.moveElement(element, finalX, finalY, speed);
  222.                                 }, speed);
  223.                         }
  224.                 },
  225.                 ajaxRequest: function(url, id, sload){
  226.                         var oXhr, elem = YAO.isString(id) ? YAO.get(id) : id, sLoading = sload || '正在获取数据,请稍后...';
  227.                         if (!url || !id) {
  228.                                 return;
  229.                         }
  230.                         if (window.XMLHttpRequest) {
  231.                                 oXhr = new XMLHttpRequest();
  232.                         }
  233.                         else {
  234.                                 if (window.ActiveXObject) {
  235.                                         oXhr = new ActiveXObject("Microsoft.XMLHTTP");
  236.                                 }
  237.                         }
  238.                         if (oXhr !== null) {
  239.                                 try {
  240.                                         oXhr.open('GET', url, true);
  241.                                         oXhr.onreadystatechange = function(){
  242.                                                 if (oXhr.readyState == 4) {
  243.                                                         if (oXhr.status == 200 || location.href.indexOf('http')===-1) {
  244.                                                                 elem.innerHTML = oXhr.responseText;
  245.                                                         }
  246.                                                         else {
  247.                                                                 elem.innerHTML = sLoading;
  248.                                                         }
  249.                                                 }
  250.                                         };
  251.                                         oXhr.setRequestHeader('X-Requested-With','XMLHttpRequest');
  252.                                         oXhr.send(null);
  253.                                 }
  254.                                 catch (e) {
  255.                                         throw new Error(e);
  256.                                         return false;
  257.                                 }
  258.                         }
  259.                         else {
  260.                                 throw new Error("Your browser does not support XMLHTTP.");
  261.                                 return false;
  262.                         }
  263.                 }
  264.         };
  265. }();
  266. YAO.simpleTab = function(oConfigs){
  267.         this.tabCnt = (oConfigs.tabId) ? YAO.get(oConfigs.tabId) : (oConfigs.tabRoot || null);
  268.         this.tabs = (oConfigs.tTag) ? this.tabCnt.getElementsByTagName(oConfigs.tTag) : (oConfigs.tabs || null);
  269.         this.contents = (oConfigs.cTag) ? this.tabCnt.getElementsByTagName(oConfigs.cTag) : (oConfigs.contents || null);
  270.         this.length = this.tabs.length || 0;
  271.         this.defaultIndex = oConfigs.defaultIndex || 0;
  272.         this.lastIndex = this.defaultIndex;
  273.         this.lastTab = this.tabs[this.lastIndex] || null;
  274.         this.lastContent = this.contents[this.lastIndex] || null;
  275.         this.evtName = oConfigs.evt || 'mouseover';
  276.         this.defaultClass = oConfigs.defaultClass || 'current';
  277.         this.previousClass = oConfigs.previousClass || '';
  278.         this.hideAll = oConfigs.hideAll || false;
  279.         this.auto = oConfigs.auto || false;
  280.         this.speed = oConfigs.speed || 6000;
  281.         this.fadeUp = oConfigs.fadeUp || false;
  282.         this.scroll = oConfigs.scroll || false;
  283.         this.scrollId = oConfigs.scrollId || null;
  284.         this.scrollSpeed = oConfigs.scrollSpeed || 5;
  285.   this.direction = oConfigs.direction || 'V';
  286.         this.activeTag = oConfigs.activeTag || 'IMG';
  287.         this.ajax = oConfigs.ajax || false;
  288.         this.aPath = oConfigs.aPath || '';
  289.        
  290.         var i, that = this;
  291.         if (this.tabs && this.contents) {
  292.             if (this.auto) {
  293.                         this.timer = setTimeout(function(){
  294.                                 that.autoChange();
  295.                         }, that.speed);
  296.                 }
  297.                 if (!this.hideAll) {
  298.                         YAO.addClass(this.lastTab, this.defaultClass);
  299.                         if (!this.ajax) {
  300.                                 this.lastContent.style.display = 'block';
  301.                         }
  302.                         else{
  303.                                 this.ajaxTab(this.lastTab);
  304.                         }
  305.                 }
  306.                 else {
  307.                         YAO.removeClass(this.lastTab, this.defaultClass);
  308.                         if (!this.scroll) {
  309.                                 this.lastContent.style.display = 'none';
  310.                         }
  311.                 }
  312.                 for (i = 0; i < this.length; ++i) {
  313.                         if (i !== this.defaultIndex && !this.scroll) {
  314.                                 YAO.removeClass(this.tabs[i], 'current');
  315.                                 if (!this.ajax) {
  316.                                         this.contents[i].style.display = 'none';
  317.                                 }
  318.                         }
  319.                         this.tabs[i]['on' + this.evtName] = function(index){
  320.                                 return function(event){
  321.                                         var evt = null, currentContent = that.ajax ? that.contents : that.contents[index], currentTab = this;
  322.                                         that.setCurrent.call(that, this, currentContent, index);
  323.                                         that.lastIndex = index;
  324.                                         if (that.auto) {
  325.                                                 that.isPause = true;
  326.                                         }
  327.                                         evt = event || window.event;
  328.                                         YAO.stopEvent(evt);
  329.                                 }
  330.                         }(i);
  331.                         this.tabs[i]['onmouseout'] = function(index){
  332.                                 return function(){
  333.                                         if (that.hideAll && that.evtName === 'mouseover') {
  334.                                                 if (that.lastTab === this) {
  335.                                                         YAO.removeClass(this, (YAO.hasClass(this, that.defaultClass) ? that.defaultClass : 'current'));
  336.                                                 }
  337.                                                 if (that.previousClassTab) {
  338.                                                         YAO.removeClass(that.previousClassTab, that.previousClass);
  339.                                                 }
  340.                                                 if (!that.scroll && !that.ajax) {
  341.                                                         that.contents[index].style.display = 'none';
  342.                                                 }
  343.                                         }
  344.                                         else {
  345.                                                 if (that.auto) {
  346.                                                         that.isPause = false;
  347.                                                 }
  348.                                         }
  349.                                 }
  350.                         }(i);
  351.                 }
  352.         }
  353. };

  354. YAO.simpleTab.prototype.timer = null;
  355. YAO.simpleTab.prototype.isPause = false;
  356. YAO.simpleTab.prototype = {
  357.         autoChange: function(){
  358.                 var that = this;
  359.                 if (!this.isPause) {
  360.                         var currentContent = null, currentTab = null;
  361.                         if (this.timer) {
  362.                                 clearTimeout(this.timer);
  363.                                 this.timer = null;
  364.                         }
  365.                         this.lastIndex = this.lastIndex + 1;
  366.                         if (this.lastIndex === this.length) {
  367.                                 this.lastIndex = 0;
  368.                         }
  369.                         currentContent = this.ajax ? this.contents : this.contents[this.lastIndex];
  370.                         currentTab = this.tabs[this.lastIndex];
  371.                         this.setCurrent(currentTab, currentContent, this.lastIndex);
  372.                         this.timer = setTimeout(function(){
  373.                                 that.autoChange();
  374.                         }, this.speed);
  375.                 }
  376.                 else {
  377.                         this.timer = setTimeout(function(){
  378.                                 that.autoChange()
  379.                         }, this.speed);
  380.                         return false;
  381.                 }
  382.         },
  383.         setCurrent: function(curTab, curCnt, index){
  384.                 var activeObj = null, itemHeight = 0, itemWidth = 0, scrollWidth = 0, scrollHeight = 0;
  385.                 YAO.removeClass(this.lastTab, (YAO.hasClass(this.lastTab, this.defaultClass) ? this.defaultClass : 'current'));
  386.                 if (curTab === this.tabs[this.defaultIndex]) {
  387.                         YAO.addClass(curTab, this.defaultClass);
  388.                 }
  389.                 else {
  390.                         YAO.addClass(curTab, 'current');
  391.                 }
  392.                 if (this.previousClass) {
  393.                         if (this.previousClassTab) {
  394.                                 YAO.removeClass(this.previousClassTab, this.previousClass);
  395.                         }
  396.                         if (index !== 0) {
  397.                                 YAO.addClass(this.tabs[index - 1], this.previousClass);
  398.                                 if ((index - 1) === this.defaultIndex) {
  399.                                         YAO.removeClass(this.tabs[index - 1], this.defaultClass);
  400.                                 }
  401.                                 this.previousClassTab = (this.tabs[index - 1]);
  402.                         }
  403.                 }
  404.                 if (!this.scroll && !this.ajax) {
  405.                         this.lastContent.style.display = "none";
  406.                         curCnt.style.display = "block";
  407.                 }
  408.                
  409.                 if (this.fadeUp) {
  410.                          activeObj = (curCnt.tagName.toUpperCase() === 'IMG') ? curCnt : curCnt.getElementsByTagName('img')[0];
  411.                         if (this.lastContent !== curCnt) {
  412.                                 YAO.fadeUp(activeObj);
  413.                         }
  414.                 }
  415.                 else {
  416.                         if (this.scroll) {
  417.                                 activeObj = (curCnt.tagName.toUpperCase() === this.activeTag) ? curCnt : curCnt.getElementsByTagName(this.activeTag)[0];
  418.                                 if(this.direction === 'V'){
  419.                                     itemHeight = activeObj.offsetHeight;
  420.                                     scrollHeight = -(index * itemHeight);
  421.                                 }
  422.                                 else{
  423.                                     itemWidth = activeObj.offsetWidth;
  424.                                     scrollWidth = -(index * itemWidth);
  425.                                 }
  426.                                 YAO.moveElement(this.scrollId, scrollWidth, scrollHeight, this.scrollSpeed);
  427.                         }
  428.                 }
  429.                 if (!this.ajax) {
  430.                         this.lastContent = curCnt;
  431.                 }
  432.                 else {
  433.                         this.ajaxTab(curTab);
  434.                 }
  435.                 this.lastTab = curTab;
  436.         },
  437.         ajaxTab: function(curTab){
  438.                 var url = '', ajaxLink = null, cnt = this.contents, uriData = this.aPath.split('/');
  439.                 ajaxLink = (curTab.tagName.toUpperCase() === 'A') ? curTab : curTab.getElementsByTagName('a')[0];
  440.                 url = uriData[0] + '/' + ajaxLink.rel + uriData[1] + uriData[2] + ajaxLink.rel;
  441.                 YAO.ajaxRequest(url, cnt, cnt.innerHTML);
  442.         }
  443. };       
复制代码


难免还有什么BUG,请测试出来的朋友,告诉我下。谢谢了先!!
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5636
威望
45
居住地
浙江省 杭州市
发表于 2009-7-10 09:14:12 |显示全部楼层

调整了下YAO库文件,然后修来了原来的speed为autoSpeed

这样更直观些吧,完整的代码:

  1. var YAO = function(){
  2.         var D = document, OA = '[object Array]', FC = "[object Function]", OP = Object.prototype, nt = "nodeType", listeners = [], unloadListeners = [], webkitKeymap = {
  3.                 63232: 38, // up
  4.                 63233: 40, // down
  5.                 63234: 37, // left
  6.                 63235: 39, // right
  7.                 63276: 33, // page up
  8.                 63277: 34, // page down
  9.                 25: 9 // SHIFT-TAB (Safari provides a different key code in
  10.         };
  11.        
  12.         return {
  13.                 isArray: function(obj){
  14.                         return OP.toString.apply(obj) === OA;
  15.                 },
  16.                 isString: function(s){
  17.                         return typeof s === 'string';
  18.                 },
  19.                 isBoolean: function(b){
  20.                         return typeof b === "boolean";
  21.                 },
  22.                 isFunction: function(func){
  23.                         return OP.toString.apply(func) === FC;
  24.                 },
  25.                 isNull: function(obj){
  26.                         return obj === null;
  27.                 },
  28.                 isNumber: function(num){
  29.                         return typeof num === "number" && isFinite(num);
  30.                 },
  31.                 isObject: function(str){
  32.                         return (str && (typeof str === "object" || this.isFunction(str))) || false;
  33.                 },
  34.                 isUndefined: function(obj){
  35.                         return typeof obj === "undefined";
  36.                 },
  37.                 hasOwnProperty: function(obj, prper){
  38.                         if (OP.hasOwnProperty) {
  39.                                 return obj.hasOwnProperty(prper);
  40.                         }
  41.                         return !this.isUndefined(obj[prper]) && obj.constructor.prototype[prper] !== obj[prper];
  42.                 },
  43.                
  44.                 ua: function(){
  45.                         var C = {
  46.                                 ie: 0,
  47.                                 opera: 0,
  48.                                 gecko: 0,
  49.                                 webkit: 0,
  50.                                 mobile: null,
  51.                                 air: 0,
  52.                                 caja: 0
  53.                         }, B = navigator.userAgent, A;
  54.                         if ((/KHTML/).test(B)) {
  55.                                 C.webkit = 1;
  56.                         }
  57.                         A = B.match(/AppleWebKit\/([^\s]*)/);
  58.                         if (A && A[1]) {
  59.                                 C.webkit = parseFloat(A[1]);
  60.                                 if (/ Mobile\//.test(B)) {
  61.                                         C.mobile = "Apple";
  62.                                 }
  63.                                 else {
  64.                                         A = B.match(/NokiaN[^\/]*/);
  65.                                         if (A) {
  66.                                                 C.mobile = A[0];
  67.                                         }
  68.                                 }
  69.                                 A = B.match(/AdobeAIR\/([^\s]*)/);
  70.                                 if (A) {
  71.                                         C.air = A[0];
  72.                                 }
  73.                         }
  74.                         if (!C.webkit) {
  75.                                 A = B.match(/Opera[\s\/]([^\s]*)/);
  76.                                 if (A && A[1]) {
  77.                                         C.opera = parseFloat(A[1]);
  78.                                         A = B.match(/Opera Mini[^;]*/);
  79.                                         if (A) {
  80.                                                 C.mobile = A[0];
  81.                                         }
  82.                                 }
  83.                                 else {
  84.                                         A = B.match(/MSIE\s([^;]*)/);
  85.                                         if (A && A[1]) {
  86.                                                 C.ie = parseFloat(A[1]);
  87.                                         }
  88.                                         else {
  89.                                                 A = B.match(/Gecko\/([^\s]*)/);
  90.                                                 if (A) {
  91.                                                         C.gecko = 1;
  92.                                                         A = B.match(/rv:([^\s\)]*)/);
  93.                                                         if (A && A[1]) {
  94.                                                                 C.gecko = parseFloat(A[1]);
  95.                                                         }
  96.                                                 }
  97.                                         }
  98.                                 }
  99.                         }
  100.                         A = B.match(/Caja\/([^\s]*)/);
  101.                         if (A && A[1]) {
  102.                                 C.caja = parseFloat(A[1]);
  103.                         }
  104.                         return C;
  105.                 }(),
  106.                
  107.                 addListener: function(el, event, func){
  108.                         try {
  109.                                 el.addEventListener(event, func, false);
  110.                         }
  111.                         catch (e) {
  112.                                 try {
  113.                                         el.attachEvent('on' + event, func);
  114.                                 }
  115.                                 catch (e) {
  116.                                         el['on' + event] = func;
  117.                                 }
  118.                         }
  119.                         if ("unload" == event) {
  120.                                 unloadListeners[unloadListeners.length] = [el, event, func];
  121.                                 return true;
  122.                         }
  123.                         else {
  124.                                 listeners[listeners.length] = [el, event, func];
  125.                         }
  126.                 },
  127.         removeListener: function(el, event, func){
  128.                         var i,uli,j,li;
  129.                         try {
  130.                                 el.removeEventListener(event, func, false);
  131.                         }
  132.                         catch (e) {
  133.                                 try {
  134.                                         el.detachEvent('on' + event, func);
  135.                                 }
  136.                                 catch (e) {
  137.                                         el['on' + event] = null;
  138.                                 }
  139.                         }
  140.                         if ("unload" == event) {
  141.                                 for (i = unloadListeners.length - 1; i > -1; i--) {
  142.                                         uli = unloadListeners[i];
  143.                                         if (uli && uli[0] === el && uli[1] == event && uli[2] == func) {
  144.                                                 unloadListeners.splice(i, 1);
  145.                                                 return true;
  146.                                         }
  147.                                 }
  148.                                 return false;
  149.                         }
  150.                         else {
  151.                                 for (j = listeners.length - 1; j > -1; j--) {
  152.                                         li = listeners[i];
  153.                                         if (li && li[0] === el && li[1] == event && li[2] == func) {
  154.                                                 delete listeners[j][2];
  155.                                                 listeners.splice(j, 1);
  156.                                                 return true;
  157.                                         }
  158.                                 }
  159.                                 return false;
  160.                         }
  161.                 },
  162.                 on: function(el, event, func){
  163.                         YAO.addListener(el, event, func);
  164.                 },
  165.                 stopEvent: function(evt){
  166.                         this.stopPropagation(evt);
  167.                         this.preventDefault(evt);
  168.                 },
  169.                 stopPropagation: function(evt){
  170.                         if (evt.stopPropagation) {
  171.                                 evt.stopPropagation();
  172.                         }
  173.                         else {
  174.                                 evt.cancelBubble = true;
  175.                         }
  176.                 },
  177.                 preventDefault: function(evt){
  178.                         if (evt.preventDefault) {
  179.                                 evt.preventDefault();
  180.                         }
  181.                         else {
  182.                                 evt.returnValue = false;
  183.                         }
  184.                 },
  185.                 getEvent: function(e){
  186.                         var ev = e || window.event;
  187.                        
  188.                         if (!ev) {
  189.                                 var c = this.getEvent.caller;
  190.                                 while (c) {
  191.                                         ev = c.arguments[0];
  192.                                         if (ev && Event == ev.constructor) {
  193.                                                 break;
  194.                                         }
  195.                                         c = c.caller;
  196.                                 }
  197.                         }
  198.                        
  199.                         return ev;
  200.                 },
  201.                 getCharCode: function(ev){
  202.                         var code = ev.keyCode || ev.charCode || 0;
  203.                        
  204.                         // webkit key normalization
  205.                         if (YAO.ua.webkit && (code in webkitKeymap)) {
  206.                                 code = webkitKeymap[code];
  207.                         }
  208.                         return code;
  209.                 },
  210.                 _unload: function(e){
  211.                         var i, l, len, index, ul = unloadListeners.slice(), context;
  212.                        
  213.                         // execute and clear stored unload listeners
  214.                         for (i = 0, len = unloadListeners.length; i < len; ++i) {
  215.                                 l = ul[i];
  216.                                 if (l) {
  217.                                         context = window;
  218.                                         l[2].call(context, YAO.getEvent(e, l[0]));
  219.                                         ul[i] = null;
  220.                                 }
  221.                         }
  222.                        
  223.                         l = null;
  224.                         context = null;
  225.                         unloadListeners = null;
  226.                        
  227.                         if (listeners) {
  228.                                 for (j = listeners.length - 1; j > -1; j--) {
  229.                                         l = listeners[j];
  230.                                         if (l) {
  231.                                                 YAO.removeListener(l[0], l[1], l[2]);
  232.                                         }
  233.                                 }
  234.                                 l = null;
  235.                         }
  236.                        
  237.                         YAO.removeListener(window, "unload", YAO._unload);
  238.                 },
  239.                
  240.                 getEl: function(elem, boundEl){
  241.                         var elemID, E, m, i, k, length, len;
  242.                         if (elem) {
  243.                                 if (elem[nt] || elem.item) {
  244.                                         return elem;
  245.                                 }
  246.                                 if (YAO.isString(elem)) {
  247.                                         elemID = elem;
  248.                                         elem = D.getElementById(elem);
  249.                                         if (elem && elem.id === elemID) {
  250.                                                 return elem;
  251.                                         }
  252.                                         else {
  253.                                                 if (elem && elem.all) {
  254.                                                         elem = null;
  255.                                                         E = D.all[elemID];
  256.                                                         for (i = 0, len = E.length; i < len; i += 1) {
  257.                                                                 if (E[i].id === elemID) {
  258.                                                                         return E[i];
  259.                                                                 }
  260.                                                         }
  261.                                                 }
  262.                                         }
  263.                                         return elem;
  264.                                 }
  265.                                 else {
  266.                                         if (elem.DOM_EVENTS) {
  267.                                                 elem = elem.get("element");
  268.                                         }
  269.                                         else {
  270.                                                 if (YAO.isArray(elem)) {
  271.                                                         m = [];
  272.                                                         for (k = 0, length = elem.length; k < length; k += 1) {
  273.                                                                 m[m.length] = YAO.getEl(elem[k]);
  274.                                                         }
  275.                                                         return m;
  276.                                                 }
  277.                                         }
  278.                                 }
  279.                         }
  280.                         return null;
  281.                 },
  282.                 hasClass: function(elem, className){
  283.                         var has = new RegExp("(?:^|\\s+)" + className + "(?:\\s+|$)");
  284.                         return has.test(elem.className);
  285.                 },
  286.                 addClass: function(elem, className){
  287.                         if (YAO.hasClass(elem, className)) {
  288.                                 return;
  289.                         }
  290.                         elem.className = [elem.className, className].join(" ");
  291.                 },
  292.                 removeClass: function(elem, className){
  293.                         var replace = new RegExp("(?:^|\\s+)" + className + "(?:\\s+|$)", "g");
  294.                         if (!YAO.hasClass(elem, className)) {
  295.                                 return;
  296.                         }
  297.                         var o = elem.className;
  298.                         elem.className = o.replace(replace, " ");
  299.                         if (YAO.hasClass(elem, className)) {
  300.                                 YAO.removeClass(elem, className);
  301.                         }
  302.                 },
  303.                 replaceClass: function(elem, newClass, oldClass){
  304.                         if (newClass === oldClass) {
  305.                                 return false;
  306.                         }
  307.                         var has = new RegExp("(?:^|\\s+)" + newClass + "(?:\\s+|$)", "g");
  308.                         if (!YAO.hasClass(elem, newClass)) {
  309.                                 YAO.addClass(elem, oldClass);
  310.                                 return;
  311.                         }
  312.                         elem.className = elem.className.replace(has, " " + oldClass + " ");
  313.                         if (YAO.hasClass(elem, newClass)) {
  314.                                 YAO.replaceClass(elem, newClass, oldClass);
  315.                         }
  316.                 },
  317.                 getElByClassName: function(className, tag, rootTag){
  318.                         var elems = [], i, tempCnt = YAO.getEl(rootTag).getElementsByTagName(tag), len = tempCnt.length;
  319.                         for (i = 0; i < len; i++) {
  320.                                 if (YAO.hasClass(tempCnt[i], className)) {
  321.                                         elems.push(tempCnt[i]);
  322.                                 }
  323.                         }
  324.                         if (elems.length < 1) {
  325.                                 return false;
  326.                         }
  327.                         else {
  328.                                 return elems;
  329.                         }
  330.                 },
  331.                 setOpacity: function(el, val){
  332.                         if (YAO.ua.ie) {
  333.                                 if (YAO.isString(el.style.filter)) {
  334.                                         el.style.filter = 'alpha(opacity=' + val * 100 + ')';
  335.                                         if (!el.currentStyle || !el.currentStyle.hasLayout) {
  336.                                                 el.style.zoom = 1;
  337.                                         }
  338.                                 }
  339.                         }
  340.                         else {
  341.                                 el.style['opacity'] = val;
  342.                         }
  343.                 },
  344.                 YTabs: function(){
  345.                         var j, len = arguments.length, sigleTab = [];
  346.                         for (j = 0; j < len; ++j) {
  347.                                 sigleTab[j] = new YAO.simpleTab(arguments[j]);
  348.                         }
  349.                 },
  350.                 fadeUp: function(elem){
  351.                         if (elem) {
  352.                                 var level = 0, fade = function(){
  353.                                         var timer = null;
  354.                                         level += 0.05;
  355.                                         if (timer) {
  356.                                                 clearTimeout(timer);
  357.                                                 timer = null;
  358.                                         }
  359.                                         if (level > 1) {
  360.                                                 YAO.setOpacity(elem, 1);
  361.                                                 return false;
  362.                                         }
  363.                                         else {
  364.                                                 YAO.setOpacity(elem, level);
  365.                                         }
  366.                                         timer = setTimeout(fade, 50);
  367.                                 };
  368.                                 fade();
  369.                         }
  370.                 },
  371.                 zebra: function(){
  372.                         var j, length = arguments.length;
  373.                         for (j = 0; j < length; ++j) {
  374.                                 (function(config){
  375.                                         var root = YAO.getEl(config.rootTag) || (config.root || null), rows = root.getElementsByTagName(config.rowTag) || (config.rows || null), i, len = rows.length, lastClass = '';
  376.                                         if (root && rows && len > 1) {
  377.                                                 for (var i = 0; i < len; ++i) {
  378.                                                         rows[i].className = i % 2 == 0 ? 'even' : 'odd';
  379.                                                         rows[i].onmouseover = function(){
  380.                                                                 lastClass = this.className;
  381.                                                                 YAO.replaceClass(this, lastClass, 'hover');
  382.                                                         };
  383.                                                         rows[i].onmouseout = function(){
  384.                                                                 YAO.replaceClass(this, 'hover', lastClass);
  385.                                                         };
  386.                                                 }
  387.                                         }
  388.                                         else {
  389.                                                 return false;
  390.                                         }
  391.                                 })(arguments[j]);
  392.                         }
  393.                 },
  394.                 moveElement: function(element, finalX, finalY, speed){
  395.                         var elem = YAO.isString(element) ? YAO.getEl(element) : element, style = null;
  396.                         if (elem) {
  397.                                 if (elem.movement) {
  398.                                         clearTimeout(elem.movement);
  399.                                 }
  400.                                 if (!elem.style.left) {
  401.                                         elem.style.left = "0";
  402.                                 }
  403.                                 if (!elem.style.top) {
  404.                                         elem.style.top = "0";
  405.                                 }
  406.                                 var xpos = parseInt(elem.style.left);
  407.                                 var ypos = parseInt(elem.style.top);
  408.                                 if (xpos == finalX && ypos == finalY) {
  409.                                         return true;
  410.                                 }
  411.                                 if (xpos < finalX) {
  412.                                         var dist = Math.ceil((finalX - xpos) / 10);
  413.                                         xpos = xpos + dist;
  414.                                 }
  415.                                 if (xpos > finalX) {
  416.                                         var dist = Math.ceil((xpos - finalX) / 10);
  417.                                         xpos = xpos - dist;
  418.                                 }
  419.                                 if (ypos < finalY) {
  420.                                         var dist = Math.ceil((finalY - ypos) / 10);
  421.                                         ypos = ypos + dist;
  422.                                 }
  423.                                 if (ypos > finalY) {
  424.                                         var dist = Math.ceil((ypos - finalY) / 10);
  425.                                         ypos = ypos - dist;
  426.                                 }
  427.                                 elem.style.left = xpos + "px";
  428.                                 elem.style.top = ypos + "px";
  429.                                 elem.movement = setTimeout(function(){
  430.                                         YAO.moveElement(element, finalX, finalY, speed);
  431.                                 }, speed);
  432.                         }
  433.                 },
  434.                 ajaxRequest: function(url, id, sload){
  435.                         var oXhr, elem = YAO.isString(id) ? YAO.getEl(id) : id, sLoading = sload || '正在获取数据,请稍后...';
  436.                         if (!url || !id) {
  437.                                 return;
  438.                         }
  439.                         if (window.XMLHttpRequest) {
  440.                                 oXhr = new XMLHttpRequest();
  441.                         }
  442.                         else {
  443.                                 if (window.ActiveXObject) {
  444.                                         oXhr = new ActiveXObject("Microsoft.XMLHTTP");
  445.                                 }
  446.                         }
  447.                         if (oXhr !== null) {
  448.                                 try {
  449.                                         oXhr.open('GET', url, true);
  450.                                         oXhr.onreadystatechange = function(){
  451.                                                 if (oXhr.readyState == 4) {
  452.                                                         if (oXhr.status == 200 || location.href.indexOf('http') === -1) {
  453.                                                                 elem.innerHTML = oXhr.responseText;
  454.                                                         }
  455.                                                         else {
  456.                                                                 elem.innerHTML = sLoading;
  457.                                                         }
  458.                                                 }
  459.                                         };
  460.                                         oXhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
  461.                                         oXhr.send(null);
  462.                                 }
  463.                                 catch (e) {
  464.                                         throw new Error(e);
  465.                                         return false;
  466.                                 }
  467.                         }
  468.                         else {
  469.                                 throw new Error("Your browser does not support XMLHTTP.");
  470.                                 return false;
  471.                         }
  472.                 }
  473.         };
  474.        
  475.         YAO.on(window, "unload", YAO._unload);
  476. }();
  477. YAO.simpleTab = function(oConfigs){
  478.         this.tabCnt = (oConfigs.tabId) ? YAO.getEl(oConfigs.tabId) : (oConfigs.tabRoot || null);
  479.         this.tabs = (oConfigs.tTag) ? this.tabCnt.getElementsByTagName(oConfigs.tTag) : (oConfigs.tabs || null);
  480.         this.contents = (oConfigs.cTag) ? this.tabCnt.getElementsByTagName(oConfigs.cTag) : (oConfigs.contents || null);
  481.         this.length = this.tabs.length || 0;
  482.         this.defaultIndex = oConfigs.defaultIndex || 0;
  483.         this.lastIndex = this.defaultIndex;
  484.         this.lastTab = this.tabs[this.lastIndex] || null;
  485.         this.lastContent = this.contents[this.lastIndex] || null;
  486.         this.evtName = oConfigs.evt || 'mouseover';
  487.         this.defaultClass = oConfigs.defaultClass || 'current';
  488.         this.previousClass = oConfigs.previousClass || '';
  489.         this.hideAll = oConfigs.hideAll || false;
  490.         this.auto = oConfigs.auto || false;
  491.         this.autoSpeed = oConfigs.autoSpeed || 6000;
  492.         this.fadeUp = oConfigs.fadeUp || false;
  493.         this.scroll = oConfigs.scroll || false;
  494.         this.scrollId = oConfigs.scrollId || null;
  495.         this.scrollSpeed = oConfigs.scrollSpeed || 5;
  496.     this.direction = oConfigs.direction || 'V';
  497.         this.activeTag = oConfigs.activeTag || 'IMG';
  498.         this.ajax = oConfigs.ajax || false;
  499.         this.aPath = oConfigs.aPath || '';
  500.        
  501.         var i, that = this;
  502.         if (this.tabs && this.contents) {
  503.             if (this.auto) {
  504.                         this.timer = setTimeout(function(){
  505.                                 that.autoChange();
  506.                         }, that.autoSpeed);
  507.                 }
  508.                 if (!this.hideAll) {
  509.                         YAO.addClass(this.lastTab, this.defaultClass);
  510.                         if (!this.ajax) {
  511.                                 this.lastContent.style.display = 'block';
  512.                         }
  513.                         else{
  514.                                 this.ajaxTab(this.lastTab);
  515.                         }
  516.                 }
  517.                 else {
  518.                         YAO.removeClass(this.lastTab, this.defaultClass);
  519.                         if (!this.scroll) {
  520.                                 this.lastContent.style.display = 'none';
  521.                         }
  522.                 }
  523.                 for (i = 0; i < this.length; ++i) {
  524.                         if (i !== this.defaultIndex && !this.scroll) {
  525.                                 YAO.removeClass(this.tabs[i], 'current');
  526.                                 if (!this.ajax) {
  527.                                         this.contents[i].style.display = 'none';
  528.                                 }
  529.                         }
  530.                         YAO.on(this.tabs[i],this.evtName, function(index){
  531.                                 return function(event){
  532.                                         var evt = null, currentContent = that.ajax ? that.contents : that.contents[index], currentTab = this;
  533.                                         that.setCurrent.call(that, this, currentContent, index);
  534.                                         that.lastIndex = index;
  535.                                         if (that.auto) {
  536.                                                 that.isPause = true;
  537.                                         }
  538.                                         evt = event || window.event;
  539.                                         YAO.stopEvent(evt);
  540.                                 }
  541.                         }(i));
  542.                         YAO.on(this.tabs[i],'mouseout', function(index){
  543.                                 return function(){
  544.                                         if (that.hideAll && that.evtName === 'mouseover') {
  545.                                                 if (that.lastTab === this) {
  546.                                                         YAO.removeClass(this, (YAO.hasClass(this, that.defaultClass) ? that.defaultClass : 'current'));
  547.                                                 }
  548.                                                 if (that.previousClassTab) {
  549.                                                         YAO.removeClass(that.previousClassTab, that.previousClass);
  550.                                                 }
  551.                                                 if (!that.scroll && !that.ajax) {
  552.                                                         that.contents[index].style.display = 'none';
  553.                                                 }
  554.                                         }
  555.                                         else {
  556.                                                 if (that.auto) {
  557.                                                         that.isPause = false;
  558.                                                 }
  559.                                         }
  560.                                 }
  561.                         }(i));
  562.                 }
  563.         }
  564. };

  565. YAO.simpleTab.prototype.timer = null;
  566. YAO.simpleTab.prototype.isPause = false;
  567. YAO.simpleTab.prototype = {
  568.         autoChange: function(){
  569.                 var that = this;
  570.                 if (!this.isPause) {
  571.                         var currentContent = null, currentTab = null;
  572.                         if (this.timer) {
  573.                                 clearTimeout(this.timer);
  574.                                 this.timer = null;
  575.                         }
  576.                         this.lastIndex = this.lastIndex + 1;
  577.                         if (this.lastIndex === this.length) {
  578.                                 this.lastIndex = 0;
  579.                         }
  580.                         currentContent = this.ajax ? this.contents : this.contents[this.lastIndex];
  581.                         currentTab = this.tabs[this.lastIndex];
  582.                         this.setCurrent(currentTab, currentContent, this.lastIndex);
  583.                         this.timer = setTimeout(function(){
  584.                                 that.autoChange();
  585.                         }, this.autoSpeed);
  586.                 }
  587.                 else {
  588.                         this.timer = setTimeout(function(){
  589.                                 that.autoChange()
  590.                         }, this.autoSpeed);
  591.                         return false;
  592.                 }
  593.         },
  594.         setCurrent: function(curTab, curCnt, index){
  595.                 var activeObj = null, itemHeight = 0, itemWidth = 0, scrollWidth = 0, scrollHeight = 0;
  596.                 YAO.removeClass(this.lastTab, (YAO.hasClass(this.lastTab, this.defaultClass) ? this.defaultClass : 'current'));
  597.                 if (curTab === this.tabs[this.defaultIndex]) {
  598.                         YAO.addClass(curTab, this.defaultClass);
  599.                 }
  600.                 else {
  601.                         YAO.addClass(curTab, 'current');
  602.                 }
  603.                 if (this.previousClass) {
  604.                         if (this.previousClassTab) {
  605.                                 YAO.removeClass(this.previousClassTab, this.previousClass);
  606.                         }
  607.                         if (index !== 0) {
  608.                                 YAO.addClass(this.tabs[index - 1], this.previousClass);
  609.                                 if ((index - 1) === this.defaultIndex) {
  610.                                         YAO.removeClass(this.tabs[index - 1], this.defaultClass);
  611.                                 }
  612.                                 this.previousClassTab = (this.tabs[index - 1]);
  613.                         }
  614.                 }
  615.                 if (!this.scroll && !this.ajax) {
  616.                         this.lastContent.style.display = "none";
  617.                         curCnt.style.display = "block";
  618.                 }
  619.                
  620.                 if (this.fadeUp) {
  621.                          activeObj = (curCnt.tagName.toUpperCase() === 'IMG') ? curCnt : curCnt.getElementsByTagName('img')[0];
  622.                         if (this.lastContent !== curCnt) {
  623.                                 YAO.fadeUp(activeObj);
  624.                         }
  625.                 }
  626.                 else {
  627.                         if (this.scroll) {
  628.                                 activeObj = (curCnt.tagName.toUpperCase() === this.activeTag) ? curCnt : curCnt.getElementsByTagName(this.activeTag)[0];
  629.                                 if(this.direction === 'V'){
  630.                                     itemHeight = activeObj.offsetHeight;
  631.                                     scrollHeight = -(index * itemHeight);
  632.                                 }
  633.                                 else{
  634.                                     itemWidth = activeObj.offsetWidth;
  635.                                     scrollWidth = -(index * itemWidth);
  636.                                 }
  637.                                 YAO.moveElement(this.scrollId, scrollWidth, scrollHeight, this.scrollSpeed);
  638.                         }
  639.                 }
  640.                 if (!this.ajax) {
  641.                         this.lastContent = curCnt;
  642.                 }
  643.                 else {
  644.                         this.ajaxTab(curTab);
  645.                 }
  646.                 this.lastTab = curTab;
  647.         },
  648.         ajaxTab: function(curTab){
  649.                 var url = '', ajaxLink = null, cnt = this.contents, uriData = this.aPath.split('/');
  650.                 ajaxLink = (curTab.tagName.toUpperCase() === 'A') ? curTab : curTab.getElementsByTagName('a')[0];
  651.                 url = uriData[0] + '/' + ajaxLink.rel + uriData[1] + uriData[2] + ajaxLink.rel;
  652.                 YAO.ajaxRequest(url, cnt, cnt.innerHTML);
  653.         }
  654. };       
复制代码

[ 本帖最后由 yaohaixiao 于 2009-7-10 09:19 编辑 ]
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5636
威望
45
居住地
浙江省 杭州市
发表于 2009-7-10 14:03:17 |显示全部楼层

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

不好意思,修改了事件加载机制,出现了点BUG,修改了。

最新代码
  1. var YAO = function(){
  2.         var D = document, OA = '[object Array]', FC = "[object Function]", OP = Object.prototype, nt = "nodeType", listeners = [], unloadListeners = [], webkitKeymap = {
  3.                 63232: 38, // up
  4.                 63233: 40, // down
  5.                 63234: 37, // left
  6.                 63235: 39, // right
  7.                 63276: 33, // page up
  8.                 63277: 34, // page down
  9.                 25: 9 // SHIFT-TAB (Safari provides a different key code in
  10.         };
  11.        
  12.         return {
  13.                 isArray: function(obj){
  14.                         return OP.toString.apply(obj) === OA;
  15.                 },
  16.                 isString: function(s){
  17.                         return typeof s === 'string';
  18.                 },
  19.                 isBoolean: function(b){
  20.                         return typeof b === "boolean";
  21.                 },
  22.                 isFunction: function(func){
  23.                         return OP.toString.apply(func) === FC;
  24.                 },
  25.                 isNull: function(obj){
  26.                         return obj === null;
  27.                 },
  28.                 isNumber: function(num){
  29.                         return typeof num === "number" && isFinite(num);
  30.                 },
  31.                 isObject: function(str){
  32.                         return (str && (typeof str === "object" || this.isFunction(str))) || false;
  33.                 },
  34.                 isUndefined: function(obj){
  35.                         return typeof obj === "undefined";
  36.                 },
  37.                 hasOwnProperty: function(obj, prper){
  38.                         if (OP.hasOwnProperty) {
  39.                                 return obj.hasOwnProperty(prper);
  40.                         }
  41.                         return !this.isUndefined(obj[prper]) && obj.constructor.prototype[prper] !== obj[prper];
  42.                 },
  43.                
  44.                 ua: function(){
  45.                         var C = {
  46.                                 ie: 0,
  47.                                 opera: 0,
  48.                                 gecko: 0,
  49.                                 webkit: 0,
  50.                                 mobile: null,
  51.                                 air: 0,
  52.                                 caja: 0
  53.                         }, B = navigator.userAgent, A;
  54.                         if ((/KHTML/).test(B)) {
  55.                                 C.webkit = 1;
  56.                         }
  57.                         A = B.match(/AppleWebKit\/([^\s]*)/);
  58.                         if (A && A[1]) {
  59.                                 C.webkit = parseFloat(A[1]);
  60.                                 if (/ Mobile\//.test(B)) {
  61.                                         C.mobile = "Apple";
  62.                                 }
  63.                                 else {
  64.                                         A = B.match(/NokiaN[^\/]*/);
  65.                                         if (A) {
  66.                                                 C.mobile = A[0];
  67.                                         }
  68.                                 }
  69.                                 A = B.match(/AdobeAIR\/([^\s]*)/);
  70.                                 if (A) {
  71.                                         C.air = A[0];
  72.                                 }
  73.                         }
  74.                         if (!C.webkit) {
  75.                                 A = B.match(/Opera[\s\/]([^\s]*)/);
  76.                                 if (A && A[1]) {
  77.                                         C.opera = parseFloat(A[1]);
  78.                                         A = B.match(/Opera Mini[^;]*/);
  79.                                         if (A) {
  80.                                                 C.mobile = A[0];
  81.                                         }
  82.                                 }
  83.                                 else {
  84.                                         A = B.match(/MSIE\s([^;]*)/);
  85.                                         if (A && A[1]) {
  86.                                                 C.ie = parseFloat(A[1]);
  87.                                         }
  88.                                         else {
  89.                                                 A = B.match(/Gecko\/([^\s]*)/);
  90.                                                 if (A) {
  91.                                                         C.gecko = 1;
  92.                                                         A = B.match(/rv:([^\s\)]*)/);
  93.                                                         if (A && A[1]) {
  94.                                                                 C.gecko = parseFloat(A[1]);
  95.                                                         }
  96.                                                 }
  97.                                         }
  98.                                 }
  99.                         }
  100.                         A = B.match(/Caja\/([^\s]*)/);
  101.                         if (A && A[1]) {
  102.                                 C.caja = parseFloat(A[1]);
  103.                         }
  104.                         return C;
  105.                 }(),
  106.                
  107.                 addListener: function(el, event, func){
  108.                         try {
  109.                                 el.addEventListener(event, func, false);
  110.                         }
  111.                         catch (e) {
  112.                                 try {
  113.                                         el.attachEvent('on' + event, func);
  114.                                 }
  115.                                 catch (e) {
  116.                                         el['on' + event] = func;
  117.                                 }
  118.                         }
  119.                         if ("unload" == event) {
  120.                                 unloadListeners[unloadListeners.length] = [el, event, func];
  121.                                 return true;
  122.                         }
  123.                         else {
  124.                                 listeners[listeners.length] = [el, event, func];
  125.                         }
  126.                 },
  127.         removeListener: function(el, event, func){
  128.                         var i,uli,j,li;
  129.                         try {
  130.                                 el.removeEventListener(event, func, false);
  131.                         }
  132.                         catch (e) {
  133.                                 try {
  134.                                         el.detachEvent('on' + event, func);
  135.                                 }
  136.                                 catch (e) {
  137.                                         el['on' + event] = null;
  138.                                 }
  139.                         }
  140.                         if ("unload" == event) {
  141.                                 for (i = unloadListeners.length - 1; i > -1; i--) {
  142.                                         uli = unloadListeners[i];
  143.                                         if (uli && uli[0] === el && uli[1] == event && uli[2] == func) {
  144.                                                 unloadListeners.splice(i, 1);
  145.                                                 return true;
  146.                                         }
  147.                                 }
  148.                                 return false;
  149.                         }
  150.                         else {
  151.                                 for (j = listeners.length - 1; j > -1; j--) {
  152.                                         li = listeners[i];
  153.                                         if (li && li[0] === el && li[1] == event && li[2] == func) {
  154.                                                 delete listeners[j][2];
  155.                                                 listeners.splice(j, 1);
  156.                                                 return true;
  157.                                         }
  158.                                 }
  159.                                 return false;
  160.                         }
  161.                 },
  162.                 on: function(el, event, func){
  163.                         YAO.addListener(el, event, func);
  164.                 },
  165.                 stopEvent: function(evt){
  166.                         this.stopPropagation(evt);
  167.                         this.preventDefault(evt);
  168.                 },
  169.                 stopPropagation: function(evt){
  170.                         if (evt.stopPropagation) {
  171.                                 evt.stopPropagation();
  172.                         }
  173.                         else {
  174.                                 evt.cancelBubble = true;
  175.                         }
  176.                 },
  177.                 preventDefault: function(evt){
  178.                         if (evt.preventDefault) {
  179.                                 evt.preventDefault();
  180.                         }
  181.                         else {
  182.                                 evt.returnValue = false;
  183.                         }
  184.                 },
  185.                 getEvent: function(e){
  186.                         var ev = e || window.event;
  187.                        
  188.                         if (!ev) {
  189.                                 var c = this.getEvent.caller;
  190.                                 while (c) {
  191.                                         ev = c.arguments[0];
  192.                                         if (ev && Event == ev.constructor) {
  193.                                                 break;
  194.                                         }
  195.                                         c = c.caller;
  196.                                 }
  197.                         }
  198.                        
  199.                         return ev;
  200.                 },
  201.                 getCharCode: function(ev){
  202.                         var code = ev.keyCode || ev.charCode || 0;
  203.                        
  204.                         // webkit key normalization
  205.                         if (YAO.ua.webkit && (code in webkitKeymap)) {
  206.                                 code = webkitKeymap[code];
  207.                         }
  208.                         return code;
  209.                 },
  210.                 _unload: function(e){
  211.                         var i, l, len, index, ul = unloadListeners.slice(), context;
  212.                        
  213.                         // execute and clear stored unload listeners
  214.                         for (i = 0, len = unloadListeners.length; i < len; ++i) {
  215.                                 l = ul[i];
  216.                                 if (l) {
  217.                                         context = window;
  218.                                         l[2].call(context, YAO.getEvent(e, l[0]));
  219.                                         ul[i] = null;
  220.                                 }
  221.                         }
  222.                        
  223.                         l = null;
  224.                         context = null;
  225.                         unloadListeners = null;
  226.                        
  227.                         if (listeners) {
  228.                                 for (j = listeners.length - 1; j > -1; j--) {
  229.                                         l = listeners[j];
  230.                                         if (l) {
  231.                                                 YAO.removeListener(l[0], l[1], l[2]);
  232.                                         }
  233.                                 }
  234.                                 l = null;
  235.                         }
  236.                        
  237.                         YAO.removeListener(window, "unload", YAO._unload);
  238.                 },
  239.                
  240.                 getEl: function(elem, boundEl){
  241.                         var elemID, E, m, i, k, length, len;
  242.                         if (elem) {
  243.                                 if (elem[nt] || elem.item) {
  244.                                         return elem;
  245.                                 }
  246.                                 if (YAO.isString(elem)) {
  247.                                         elemID = elem;
  248.                                         elem = D.getElementById(elem);
  249.                                         if (elem && elem.id === elemID) {
  250.                                                 return elem;
  251.                                         }
  252.                                         else {
  253.                                                 if (elem && elem.all) {
  254.                                                         elem = null;
  255.                                                         E = D.all[elemID];
  256.                                                         for (i = 0, len = E.length; i < len; i += 1) {
  257.                                                                 if (E[i].id === elemID) {
  258.                                                                         return E[i];
  259.                                                                 }
  260.                                                         }
  261.                                                 }
  262.                                         }
  263.                                         return elem;
  264.                                 }
  265.                                 else {
  266.                                         if (elem.DOM_EVENTS) {
  267.                                                 elem = elem.get("element");
  268.                                         }
  269.                                         else {
  270.                                                 if (YAO.isArray(elem)) {
  271.                                                         m = [];
  272.                                                         for (k = 0, length = elem.length; k < length; k += 1) {
  273.                                                                 m[m.length] = YAO.getEl(elem[k]);
  274.                                                         }
  275.                                                         return m;
  276.                                                 }
  277.                                         }
  278.                                 }
  279.                         }
  280.                         return null;
  281.                 },
  282.                 hasClass: function(elem, className){
  283.                         var has = new RegExp("(?:^|\\s+)" + className + "(?:\\s+|$)");
  284.                         return has.test(elem.className);
  285.                 },
  286.                 addClass: function(elem, className){
  287.                         if (YAO.hasClass(elem, className)) {
  288.                                 return;
  289.                         }
  290.                         elem.className = [elem.className, className].join(" ");
  291.                 },
  292.                 removeClass: function(elem, className){
  293.                         var replace = new RegExp("(?:^|\\s+)" + className + "(?:\\s+|$)", "g");
  294.                         if (!YAO.hasClass(elem, className)) {
  295.                                 return;
  296.                         }
  297.                         var o = elem.className;
  298.                         elem.className = o.replace(replace, " ");
  299.                         if (YAO.hasClass(elem, className)) {
  300.                                 YAO.removeClass(elem, className);
  301.                         }
  302.                 },
  303.                 replaceClass: function(elem, newClass, oldClass){
  304.                         if (newClass === oldClass) {
  305.                                 return false;
  306.                         }
  307.                         var has = new RegExp("(?:^|\\s+)" + newClass + "(?:\\s+|$)", "g");
  308.                         if (!YAO.hasClass(elem, newClass)) {
  309.                                 YAO.addClass(elem, oldClass);
  310.                                 return;
  311.                         }
  312.                         elem.className = elem.className.replace(has, " " + oldClass + " ");
  313.                         if (YAO.hasClass(elem, newClass)) {
  314.                                 YAO.replaceClass(elem, newClass, oldClass);
  315.                         }
  316.                 },
  317.                 getElByClassName: function(className, tag, rootTag){
  318.                         var elems = [], i, tempCnt = YAO.getEl(rootTag).getElementsByTagName(tag), len = tempCnt.length;
  319.                         for (i = 0; i < len; i++) {
  320.                                 if (YAO.hasClass(tempCnt[i], className)) {
  321.                                         elems.push(tempCnt[i]);
  322.                                 }
  323.                         }
  324.                         if (elems.length < 1) {
  325.                                 return false;
  326.                         }
  327.                         else {
  328.                                 return elems;
  329.                         }
  330.                 },
  331.                 setOpacity: function(el, val){
  332.                         if (YAO.ua.ie) {
  333.                                 if (YAO.isString(el.style.filter)) {
  334.                                         el.style.filter = 'alpha(opacity=' + val * 100 + ')';
  335.                                         if (!el.currentStyle || !el.currentStyle.hasLayout) {
  336.                                                 el.style.zoom = 1;
  337.                                         }
  338.                                 }
  339.                         }
  340.                         else {
  341.                                 el.style['opacity'] = val;
  342.                         }
  343.                 },
  344.                 YTabs: function(){
  345.                         var j, len = arguments.length, sigleTab = [];
  346.                         for (j = 0; j < len; ++j) {
  347.                                 sigleTab[j] = new YAO.simpleTab(arguments[j]);
  348.                         }
  349.                 },
  350.                 fadeUp: function(elem){
  351.                         if (elem) {
  352.                                 var level = 0, fade = function(){
  353.                                         var timer = null;
  354.                                         level += 0.05;
  355.                                         if (timer) {
  356.                                                 clearTimeout(timer);
  357.                                                 timer = null;
  358.                                         }
  359.                                         if (level > 1) {
  360.                                                 YAO.setOpacity(elem, 1);
  361.                                                 return false;
  362.                                         }
  363.                                         else {
  364.                                                 YAO.setOpacity(elem, level);
  365.                                         }
  366.                                         timer = setTimeout(fade, 50);
  367.                                 };
  368.                                 fade();
  369.                         }
  370.                 },
  371.                 zebra: function(){
  372.                         var j, length = arguments.length;
  373.                         for (j = 0; j < length; ++j) {
  374.                                 (function(config){
  375.                                         var root = YAO.getEl(config.rootTag) || (config.root || null), rows = root.getElementsByTagName(config.rowTag) || (config.rows || null), i, len = rows.length, lastClass = '';
  376.                                         if (root && rows && len > 1) {
  377.                                                 for (var i = 0; i < len; ++i) {
  378.                                                         rows[i].className = i % 2 == 0 ? 'even' : 'odd';
  379.                                                         rows[i].onmouseover = function(){
  380.                                                                 lastClass = this.className;
  381.                                                                 YAO.replaceClass(this, lastClass, 'hover');
  382.                                                         };
  383.                                                         rows[i].onmouseout = function(){
  384.                                                                 YAO.replaceClass(this, 'hover', lastClass);
  385.                                                         };
  386.                                                 }
  387.                                         }
  388.                                         else {
  389.                                                 return false;
  390.                                         }
  391.                                 })(arguments[j]);
  392.                         }
  393.                 },
  394.                 moveElement: function(element, finalX, finalY, speed){
  395.                         var elem = YAO.isString(element) ? YAO.getEl(element) : element, style = null;
  396.                         if (elem) {
  397.                                 if (elem.movement) {
  398.                                         clearTimeout(elem.movement);
  399.                                 }
  400.                                 if (!elem.style.left) {
  401.                                         elem.style.left = "0";
  402.                                 }
  403.                                 if (!elem.style.top) {
  404.                                         elem.style.top = "0";
  405.                                 }
  406.                                 var xpos = parseInt(elem.style.left);
  407.                                 var ypos = parseInt(elem.style.top);
  408.                                 if (xpos == finalX && ypos == finalY) {
  409.                                         return true;
  410.                                 }
  411.                                 if (xpos < finalX) {
  412.                                         var dist = Math.ceil((finalX - xpos) / 10);
  413.                                         xpos = xpos + dist;
  414.                                 }
  415.                                 if (xpos > finalX) {
  416.                                         var dist = Math.ceil((xpos - finalX) / 10);
  417.                                         xpos = xpos - dist;
  418.                                 }
  419.                                 if (ypos < finalY) {
  420.                                         var dist = Math.ceil((finalY - ypos) / 10);
  421.                                         ypos = ypos + dist;
  422.                                 }
  423.                                 if (ypos > finalY) {
  424.                                         var dist = Math.ceil((ypos - finalY) / 10);
  425.                                         ypos = ypos - dist;
  426.                                 }
  427.                                 elem.style.left = xpos + "px";
  428.                                 elem.style.top = ypos + "px";
  429.                                 elem.movement = setTimeout(function(){
  430.                                         YAO.moveElement(element, finalX, finalY, speed);
  431.                                 }, speed);
  432.                         }
  433.                 },
  434.                 ajaxRequest: function(url, id, sload){
  435.                         var oXhr, elem = YAO.isString(id) ? YAO.getEl(id) : id, sLoading = sload || '正在获取数据,请稍后...';
  436.                         if (!url || !id) {
  437.                                 return;
  438.                         }
  439.                         if (window.XMLHttpRequest) {
  440.                                 oXhr = new XMLHttpRequest();
  441.                         }
  442.                         else {
  443.                                 if (window.ActiveXObject) {
  444.                                         oXhr = new ActiveXObject("Microsoft.XMLHTTP");
  445.                                 }
  446.                         }
  447.                         if (oXhr !== null) {
  448.                                 try {
  449.                                         oXhr.open('GET', url, true);
  450.                                         oXhr.onreadystatechange = function(){
  451.                                                 if (oXhr.readyState == 4) {
  452.                                                         if (oXhr.status == 200 || location.href.indexOf('http') === -1) {
  453.                                                                 elem.innerHTML = oXhr.responseText;
  454.                                                         }
  455.                                                         else {
  456.                                                                 elem.innerHTML = sLoading;
  457.                                                         }
  458.                                                 }
  459.                                         };
  460.                                         oXhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
  461.                                         oXhr.send(null);
  462.                                 }
  463.                                 catch (e) {
  464.                                         throw new Error(e);
  465.                                         return false;
  466.                                 }
  467.                         }
  468.                         else {
  469.                                 throw new Error("Your browser does not support XMLHTTP.");
  470.                                 return false;
  471.                         }
  472.                 }
  473.         };
  474.        
  475.         YAO.on(window, "unload", YAO._unload);
  476. }();
  477. YAO.simpleTab = function(oConfigs){
  478.         this.tabCnt = (oConfigs.tabId) ? YAO.getEl(oConfigs.tabId) : (oConfigs.tabRoot || null);
  479.         this.tabs = (oConfigs.tTag) ? this.tabCnt.getElementsByTagName(oConfigs.tTag) : (oConfigs.tabs || null);
  480.         this.contents = (oConfigs.cTag) ? this.tabCnt.getElementsByTagName(oConfigs.cTag) : (oConfigs.contents || null);
  481.         this.length = this.tabs.length || 0;
  482.         this.defaultIndex = oConfigs.defaultIndex || 0;
  483.         this.lastIndex = this.defaultIndex;
  484.         this.lastTab = this.tabs[this.lastIndex] || null;
  485.         this.lastContent = this.contents[this.lastIndex] || null;
  486.         this.evtName = oConfigs.evt || 'mouseover';
  487.         this.defaultClass = oConfigs.defaultClass || 'current';
  488.         this.previousClass = oConfigs.previousClass || '';
  489.         this.hideAll = oConfigs.hideAll || false;
  490.         this.auto = oConfigs.auto || false;
  491.         this.autoSpeed = oConfigs.autoSpeed || 6000;
  492.         this.fadeUp = oConfigs.fadeUp || false;
  493.         this.scroll = oConfigs.scroll || false;
  494.         this.scrollId = oConfigs.scrollId || null;
  495.         this.scrollSpeed = oConfigs.scrollSpeed || 5;
  496.     this.direction = oConfigs.direction || 'V';
  497.         this.activeTag = oConfigs.activeTag || 'IMG';
  498.         this.ajax = oConfigs.ajax || false;
  499.         this.aPath = oConfigs.aPath || '';
  500.        
  501.         var i, that = this;
  502.         if (this.tabs && this.contents) {
  503.             if (this.auto) {
  504.                         this.timer = setTimeout(function(){
  505.                                 that.autoChange();
  506.                         }, that.autoSpeed);
  507.                 }
  508.                 if (!this.hideAll) {
  509.                         YAO.addClass(this.lastTab, this.defaultClass);
  510.                         if (!this.ajax) {
  511.                                 this.lastContent.style.display = 'block';
  512.                         }
  513.                         else{
  514.                                 this.ajaxTab(this.lastTab);
  515.                         }
  516.                 }
  517.                 else {
  518.                         YAO.removeClass(this.lastTab, this.defaultClass);
  519.                         if (!this.scroll) {
  520.                                 this.lastContent.style.display = 'none';
  521.                         }
  522.                 }
  523.                 for (i = 0; i < this.length; ++i) {
  524.                         if (i !== this.defaultIndex && !this.scroll) {
  525.                                 YAO.removeClass(this.tabs[i], 'current');
  526.                                 if (!this.ajax) {
  527.                                         this.contents[i].style.display = 'none';
  528.                                 }
  529.                         }
  530.                         YAO.on(this.tabs[i],this.evtName, function(index){
  531.                                 return function(event){
  532.                                         var evt = null, currentContent = that.ajax ? that.contents : that.contents[index], currentTab = this;
  533.                                         that.setCurrent.call(that, currentContent, index);
  534.                                         that.lastIndex = index;
  535.                                         if (that.auto) {
  536.                                                 that.isPause = true;
  537.                                         }
  538.                                         evt = event || window.event;
  539.                                         YAO.stopEvent(evt);
  540.                                 }
  541.                         }(i));
  542.                         YAO.on(this.tabs[i],'mouseout', function(index){
  543.                                 return function(){
  544.                                         if (that.hideAll && that.evtName === 'mouseover') {
  545.                                                 if (that.lastTab === this) {
  546.                                                         YAO.removeClass(this, (YAO.hasClass(this, that.defaultClass) ? that.defaultClass : 'current'));
  547.                                                 }
  548.                                                 if (that.previousClassTab) {
  549.                                                         YAO.removeClass(that.previousClassTab, that.previousClass);
  550.                                                 }
  551.                                                 if (!that.scroll && !that.ajax) {
  552.                                                         that.contents[index].style.display = 'none';
  553.                                                 }
  554.                                         }
  555.                                         else {
  556.                                                 if (that.auto) {
  557.                                                         that.isPause = false;
  558.                                                 }
  559.                                         }
  560.                                 }
  561.                         }(i));
  562.                 }
  563.         }
  564. };

  565. YAO.simpleTab.prototype.timer = null;
  566. YAO.simpleTab.prototype.isPause = false;
  567. YAO.simpleTab.prototype = {
  568.         autoChange: function(){
  569.                 var that = this;
  570.                 if (!this.isPause) {
  571.                         var currentContent = null, currentTab = null;
  572.                         if (this.timer) {
  573.                                 clearTimeout(this.timer);
  574.                                 this.timer = null;
  575.                         }
  576.                         this.lastIndex = this.lastIndex + 1;
  577.                         if (this.lastIndex === this.length) {
  578.                                 this.lastIndex = 0;
  579.                         }
  580.                         currentContent = this.ajax ? this.contents : this.contents[this.lastIndex];
  581.                         currentTab = this.tabs[this.lastIndex];
  582.                         this.setCurrent(currentContent, this.lastIndex);
  583.                         this.timer = setTimeout(function(){
  584.                                 that.autoChange();
  585.                         }, this.autoSpeed);
  586.                 }
  587.                 else {
  588.                         this.timer = setTimeout(function(){
  589.                                 that.autoChange()
  590.                         }, this.autoSpeed);
  591.                         return false;
  592.                 }
  593.         },
  594.         setCurrent: function(curCnt, index){
  595.                 var activeObj = null, itemHeight = 0, itemWidth = 0, scrollWidth = 0, scrollHeight = 0;
  596.                 curTab = this.tabs[index];
  597.                 YAO.removeClass(this.lastTab, (YAO.hasClass(this.lastTab, this.defaultClass) ? this.defaultClass : 'current'));
  598.                 if (curTab === this.tabs[this.defaultIndex]) {
  599.                         YAO.addClass(curTab, this.defaultClass);
  600.                 }
  601.                 else {
  602.                         YAO.addClass(curTab, 'current');
  603.                 }
  604.                 if (this.previousClass) {
  605.                         if (this.previousClassTab) {
  606.                                 YAO.removeClass(this.previousClassTab, this.previousClass);
  607.                         }
  608.                         if (index !== 0) {
  609.                                 YAO.addClass(this.tabs[index - 1], this.previousClass);
  610.                                 if ((index - 1) === this.defaultIndex) {
  611.                                         YAO.removeClass(this.tabs[index - 1], this.defaultClass);
  612.                                 }
  613.                                 this.previousClassTab = (this.tabs[index - 1]);
  614.                         }
  615.                 }
  616.                 if (!this.scroll && !this.ajax) {
  617.                         this.lastContent.style.display = "none";
  618.                         curCnt.style.display = "block";
  619.                 }
  620.                
  621.                 if (this.fadeUp) {
  622.                          activeObj = (curCnt.tagName.toUpperCase() === 'IMG') ? curCnt : curCnt.getElementsByTagName('img')[0];
  623.                         if (this.lastContent !== curCnt) {
  624.                                 YAO.fadeUp(activeObj);
  625.                         }
  626.                 }
  627.                 else {
  628.                         if (this.scroll) {
  629.                                 activeObj = (curCnt.tagName.toUpperCase() === this.activeTag) ? curCnt : curCnt.getElementsByTagName(this.activeTag)[0];
  630.                                 if(this.direction === 'V'){
  631.                                     itemHeight = activeObj.offsetHeight;
  632.                                     scrollHeight = -(index * itemHeight);
  633.                                 }
  634.                                 else{
  635.                                     itemWidth = activeObj.offsetWidth;
  636.                                     scrollWidth = -(index * itemWidth);
  637.                                 }
  638.                                 YAO.moveElement(this.scrollId, scrollWidth, scrollHeight, this.scrollSpeed);
  639.                         }
  640.                 }
  641.                 if (!this.ajax) {
  642.                         this.lastContent = curCnt;
  643.                 }
  644.                 else {
  645.                         this.ajaxTab(curTab);
  646.                 }
  647.                 this.lastTab = curTab;
  648.         },
  649.         ajaxTab: function(curTab){
  650.                 var url = '', ajaxLink = null, cnt = this.contents, uriData = this.aPath.split('/');
  651.                 ajaxLink = (curTab.tagName.toUpperCase() === 'A') ? curTab : curTab.getElementsByTagName('a')[0];
  652.                 url = uriData[0] + '/' + ajaxLink.rel + uriData[1] + uriData[2] + ajaxLink.rel;
  653.                 YAO.ajaxRequest(url, cnt, cnt.innerHTML);
  654.         }
  655. };       
复制代码


哎,还是自己基础知识没有学习好,在IE的冒泡事件里A标签的this指向的Object但是不是一个XHTML DOM对象,通过这个this是获得不了tagName的,所以我在IE里给this添加className只是给一个JS的对象添加了一个属性,而浏览器不会把这个属性跟XHTML DOM联系起来,也就不会解析相应的CSS样式,并在IE中显示出来。

呵呵,不知道大家发现没有,我现在的演示在IE中,那个滚动切换的圆点,点击的时候,我的期望是显示红摄圆点(current的className样式)。哎,还总自以为自己对DOM的事件有一定的了解了,却发先自己学的很不扎实。哎!!还要继续努力啊!!
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5636
威望
45
居住地
浙江省 杭州市
发表于 2009-7-10 14:12:41 |显示全部楼层

呵呵,可能我上面说的不清楚,给个示例

  1. <a id="aLink" href="http://www.yaohaixiao.com/">A Link</a>

  2. <script language="javascript" type="text/javascript">
  3. var Link = document.getElementById()
  4. function addListener(el, event, func){
  5.             try {
  6.                 el.addEventListener(event, func, false);
  7.             }
  8.             catch (e) {
  9.                 try {
  10.                     el.attachEvent('on' + event, func);
  11.                 }
  12.                 catch (e) {
  13.                     el['on' + event] = func;
  14.                 }
  15.             }
  16. }

  17. addListener(Link, 'click', function(){
  18.    alert(this);
  19.    alert(this.tagName);
  20. });
  21. </script>
复制代码


大家到IE和FF测试下就知道我说的不同了
帖子
243
体力
733
威望
0
居住地
广东省 深圳市
发表于 2009-7-10 15:46:14 |显示全部楼层
好好学习,天天向上!
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5636
威望
45
居住地
浙江省 杭州市
发表于 2009-7-11 05:44:41 |显示全部楼层

又添加了一个新示例

看看!!



http://www.yaohaixiao.com/effects/samples/ytabs/

程序打包:

[ 本帖最后由 yaohaixiao 于 2009-7-11 05:46 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
帖子
1538
体力
7921
威望
0
发表于 2009-7-11 08:38:32 |显示全部楼层
楼主,,,效果真棒... 眼睛都看花了...

能不能整理1个最新的 完整的 包呀...
看到后面都不知道你哪个是最新最完整的啦.呵呵...

另外,问下楼主, 你有几个 图片焦点变化的 效果,,, 其中里面的 图片 能不能放GIF动画格式的图片啊?
http://www.i3gchina.com/bnqhtml/4.html 我用了个类似的,,,
但放了 gif动画图片,,,她的gif动画不起效果了...虽然其他焦点变化,图片显示都正常, 但那个GIF图片,却好像只是静态的.
不知道能否解决?谢谢啊
www.i1.cn
找些人帮忙。。。
nisk 
帖子
45
体力
165
威望
0
居住地
广东省 广州市
发表于 2009-7-11 10:04:01 |显示全部楼层
Thanks~~~~收下。。
www.mainones.com
yaohaixiao 楼主

会武术的科学家

实习版主

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

回复 143# dnaliang 的帖子

我第一贴的下载地址就可以下载最新的全部效果打包,你自己去下。你的那个地址的效果我看过了,我劝你还是不要用那种代码的效果。找个其他的吧!

  1. var browser=navigator.userAgent.toLowerCase();
  2. var IE = false;
  3. if (browser.indexOf("msie") != -1) {
  4.         IE = true;
  5. }
  6. /*
  7. var IE = function(){
  8. if (navigator.userAgent.toLowerCase().indexOf("msie") != -1) {
  9.    return true;
  10. }
  11. else{
  12.     return false;
  13. }
  14. }
  15. */

  16. // 完全可以删除
  17. function debug(v) {
  18.         var b = document.getElementsByTagName('body')[0];
  19.         var d = document.createElement('div');
  20.         d.style.color="#fff";
  21.         d.innerHTML = v;
  22.         b.insertBefore(d, b.firstChild);
  23. }
  24. var imgs = Array();  // 这个很新颖,搞笑
  25. var currScene = 0;
  26. var pgs = Array();
  27. var slideID = null;
  28. var urls = [
  29.         'http://www.96ta.cn',
  30.         'http://www.96ta.cn',
  31.         'http://www.96ta.cn',
  32.         'http://www.96ta.cn',
  33. ];

  34. function initAnimation() {
  35.         var h = $('fla_head');
  36.         imgs = h.getElementsByTagName('img');
  37.         for(var i=0; i<imgs.length; i++) {
  38.                 if(urls[i]!='') {
  39.                         imgs[i].url = urls[i] // 这个也很有创意,给这个IMG对象添加url属性,没有错,但估计些的人,不清楚为什么可以起作用,用闭包就可以解决
  40.                         imgs[i].onclick = function() {
  41.                                 location.href = this.url;//绕了一圈,原来即使想给图加个连接,为什么不直接就在页面里加链接,这样JS不能运行,也可以点击啊,整这么多事
  42.                                
  43.                         }
  44.                         imgs[i].style.cursor = 'pointer';// 如果是链接,这个就没有必要了
  45.                 }
  46.         }
  47.        
  48.         pgs = $('fla_pages').getElementsByTagName('a');
  49.         for(var i=0; i<pgs.length; i++) {
  50.                 pgs[i].i = i; //还是上面那招,不过现在是给A标签这个DOM对象添加.i这个属性
  51.                 pgs[i].onclick = function(){
  52.                         nextScene(this.i);
  53.                 }
  54.         }
  55.         $('prev_scene').onclick = function() {
  56.                 if(currScene!=0)
  57.                 nextScene(currScene-1);
  58.         }
  59.         $('next_scene').onclick = function() {
  60.                 nextScene(currScene+1);
  61.         }
  62.         $('pause_scene').onclick = function() {
  63.                 togglePlaySlideShow(this);
  64.         }

  65.         startSlideShow();
  66. }

  67. var step = 10;
  68. var timeID = null;
  69. function animate(el, id) {
  70.         if(!timeID) {
  71. //                alert(el.src);
  72.                 el.style.zIndex = 20;
  73.                 imgs[id].style.zIndex = 19;
  74.                
  75.                 el.style.opacity = 1;
  76.                
  77.                 if(IE) {
  78.                         el.style.filter = "alpha(opacity=100)";
  79.                 }
  80.                
  81.                 timeID = setInterval(function(){animate(el, id)}, 1);
  82.         }
  83.         el.style.opacity = parseFloat(el.style.opacity) - (step/100);
  84.         if(IE) {
  85.                 el.style.filter = "alpha(opacity="+ parseFloat(el.style.opacity)*100 +")";
  86.         }
  87.        
  88.         if(parseFloat(el.style.opacity) < 0.01) {
  89.                 clearInterval(timeID);
  90.                 timeID = null;
  91.                 el.style.zIndex = 1;
  92.                 imgs[id].style.zIndex = 20;
  93.                 pgs[currScene].className = '';
  94.                 pgs[id].className = 'active';
  95.                 el.style.opacity = 1;
  96.                 if(IE) {
  97.                         el.style.filter = "alpha(opacity=100)";
  98.                 }
  99.                 currScene = id;
  100. //                startSlideShow();
  101.         }
  102. }

  103. function nextScene(id) {
  104.         if(id==imgs.length) {
  105.                 id=0;
  106.         }
  107. //        debug('ID:' + id);
  108. //        debug('currScene:' + currScene);
  109.         animate(imgs[currScene], id);
  110.        
  111. }
  112. function togglePlaySlideShow(el) {
  113.         if(slideID) {
  114.                 clearInterval(slideID);
  115.                 slideID = null;
  116.                 el.innerHTML = 'play';
  117.         }else {
  118.                 startSlideShow();
  119.                 el.innerHTML = 'pause';
  120.         }
  121. }

  122. function startSlideShow() {
  123.         if(!slideID) {
  124.                 slideID = setInterval(startSlideShow, 4000);
  125.         }else {
  126.                 id = currScene+1;
  127.                 nextScene(id);
  128.         }
  129. }
复制代码


唉,不想在些注释了。
yaohaixiao 楼主

会武术的科学家

实习版主

帖子
2057
体力
5636
威望
45
居住地
浙江省 杭州市
发表于 2009-7-11 11:56:18 |显示全部楼层

现在我的这个完整的JS库代码

把之前自己整理的一些觉得比较实用的代码整合一下,写成了现在的YAO.js库,呵呵,只是包含很多功能单体类,这样的代码估计大家看得更清楚些,没有过深的链,最有3级,也算是方便大家调用。由于代码比较常了,贴不下,就打包给大家自己看吧,能力有限,有什么不对的还请大家指正,稍后我就会用这个库把我之前的一系列的程序重写,整理后一起发给大家看看,那些也算是比较使用的东西。

YAO.JS未压缩版:

YAO-MINI.JS压缩版:

ytabs.js基本是直针对我这个滑动门的代码:

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

竹叶青青

银牌会员  

帖子
305
体力
1847
威望
0
居住地
北京市 朝阳区
发表于 2009-7-11 12:23:50 |显示全部楼层
很好的东西,有几样正需要着
LZ:好棒,支持你!
路漫漫长,一步一步扎实的走!
帖子
47
体力
109
威望
0
居住地
海南省 海口市
发表于 2009-7-11 14:01:45 |显示全部楼层
漂亮,收藏了……
帖子
45
体力
677
威望
0
居住地
河南省 郑州市
发表于 2009-7-11 14:55:07 |显示全部楼层
好东西 学习中~ 非常感谢楼主!
帖子
1329
体力
7185
威望
0
居住地
陕西省 西安市
发表于 2009-7-11 15:18:22 |显示全部楼层
值得收藏啊
您需要登录后才可以回帖 登录 | 注册


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

GMT+8, 2012-4-21 05:37 , Processed in 0.166929 second(s), 7 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部