HTML

 

 
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
  2. <html> 
  3. <head> 
  4.     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
  5.     <title>Untitled Document</title> 
  6. <style> 
  7. .Marquee{ width:490px; margin:50px auto 0; overflow:hidden;}  
  8. body,div,ul,li{ margin:0; padding:0;}  
  9. ul,li{ list-style:none;}  
  10. img{ display:block; border:none;}  
  11. .content-main{ width:490px; height:170px; overflow:hidden;}  
  12. .content{ width:490px; height:170px; overflow:hidden;}  
  13. .hide{ display:none;}  
  14. .menu{ width:490px; height:22px; overflow:hidden; background:#966;}  
  15. .menu li{ width:160px; height:22px; overflow:hidden; float:left; line-height:22px; text-align:center;}  
  16. .menu li.last-col{ width:170px; height:22px; overflow:hidden;}  
  17. .current{ background: #F00;}  
  18. .content a{ width:490px; height:170px; overflow:hidden; display:block;}  
  19. </style>   
  20. <script src="base.js"></script> 
  21. </head> 
  22. <body> 
  23.     <div id="Marquee" class="Marquee"> 
  24.         <div class="content-main"> 
  25.             <div class="content"><a href="#" target="_blank"><img  src="p_w_picpaths/1.jpg"/></a></div> 
  26.             <div class="content hide"><a href="#" target="_blank"><img  src="p_w_picpaths/2.jpg"/></a></div> 
  27.             <div class="content hide"><a href="#" target="_blank"><img  src="p_w_picpaths/3.jpg"/></a></div> 
  28.         </div> 
  29.         <ul class="menu"> 
  30.             <li class="list1">tab1</li> 
  31.             <li class="list1">tab2</li> 
  32.             <li class="list1 last-col">tab3</li> 
  33.         </ul> 
  34.         </div>   
  35. <script src="slide.js"></script>    
  36. <script> 
  37.     var tabMenu = getElementsByClassName("list1"),  
  38.         tabContent = getElementsByClassName("content");  
  39.     new Slider({tabMenu :tabMenu,tabContent : tabContent,autoPlay : true});  
  40.           
  41. </script> 
  42. </body> 
  43. </html> 

base.js

 

 
  1. function getElementsByClassName(className,context){  
  2.         context = context || document;  
  3.         if(context.getElementsByClassName){  
  4.             return context.getElementsByClassName(className);     
  5.         }  
  6.         var nodes = context.getElementsByTagName("*"),ret=[];//获取页面上的所有节点  
  7.         for(var i=0;i<nodes.length;i++){   //遍历所有的节点  
  8.             if(hasClass(nodes[i],className)) ret.push(nodes[i]);  
  9.         }     
  10.         return ret;  
  11.     }  
  12.       
  13. //检查有没有类  
  14. function hasClass(node,className){  
  15.     var names = node.className.split(/\s+/);//正则表达式所有的类名用空格分开     
  16.     //遍历这个类名  
  17.     for(var i=0;i<names.length;i++){  
  18.         if(names[i]==className)  
  19.             return true;      
  20.         }  
  21.         return false;     
  22.     }  
  23.           
  24. /**  
  25. 参数说明  
  26. curTime 当前时间 即动画已经进行了多长时间 开始时间为0  
  27. start : 开始值  
  28. dur : 动画持续多长时间  
  29. alter : 总的变化量  
  30. */ 
  31. function animate(o,start,alter,dur,fx){  
  32.     var curTime=0;  
  33.     var t = setInterval(function(){  
  34.         if(curTime>=dur) clearInterval(t);  
  35.         for(var i in start){  
  36.             o.style[i] = fx(start[i],alter[i],curTime,dur) + "px";    
  37.         }  
  38.         curTime+=50;  
  39.     },50)     
  40.     return function(){  
  41.         clearInterval(t);     
  42.     };  
  43. }  
  44.  
  45. function Linear(start,alter,curTime,dur){  
  46.     return start + curTime/dur * alter;   
  47.     //最简单的线性变化 即匀速运动      
  48. }  
  49. //加速运动  
  50. function Quad(start,alter,curTime,dur){  
  51.     return start + Math.pow(curTime/dur,2)*alter;     
  52. }  
  53.  function addClass(obj,className){    
  54.      obj.className+=" " +className;      
  55.      return obj;    
  56. }  
  57. function delClass(obj,className){    
  58.     var s = obj.className.split(/\s+/);//正则把类名分开    
  59.     for(var i=0;i<s.length;i++){    
  60.     if(s[i]==className){    
  61.     delete s[i];        
  62.     }       
  63.     }    
  64.     obj.className = s.join(" ");    
  65.     return obj;    
  66. }   
  67. function addEvent(obj,type,fn,status){  
  68.     if(obj.addEventListener){  
  69.         obj.addEventListener(type,fn,false);  
  70.     }else{  
  71.         obj.attachEvent("on"+type,function(){  
  72.             fn.call(obj);  
  73.         })  
  74.     }  
  75. }  

slider.js

 

 
  1. /**  
  2.  * @author tugenhua   
  3.  * @param {Object} config 在构造函数内 config以对象的方式传入参数  
  4.  * 以前我们传参数(xx,x,y)这样传的 但是以对象方式传入参数有个好处 就是当实例化对象时候 不需要按照顺序写!  
  5.  * 那个写在前面或者写在后面没有关系   
  6.  * 在页面上调用方式 如下:new Slider({tabMenu :tabMenu,tabContent : tabContent,autoPlay : true});  
  7.  * autoPlay为true 说明可以自动播放 如果传参数为flase的话 那么他就不会自动切换,  
  8.  * 当然在函数内 config.trigger 有这样的传递参数 默认情况下为鼠标移动 我们在传参数时候  
  9.  * 也可以传click事件 方式:trigger :"click" 就是以点击形式  
  10.  * 在写HTML结构时 尽量以列表项和内容项有相同的class 这样就可以获取class 进行操作  
  11.  * 此js 获取类名依赖于底层base.js  
  12.  * 在写setInterval时候 一定要注意一个地方 就是要保存时间t保存下来 否则的话在轮播时候会有bug的  
  13.  * 这个幻灯片原里其实就是和tab自动切换的原理是一样的  那么tab自动切换我就不写了,原理是一模一样的.  
  14.  */ 
  15. function Slider(config){  
  16.     this.tabMenu = config.tabMenu;  
  17.     this.tabContent = config.tabContent;  
  18.     this.currentClass = config.currentClass || "current";  
  19.     var trigger = config.trigger || "mouseover";  
  20.     var playTime = config.playTime || 3000;  
  21.     var autoPlay = config.autoPlay;  
  22.     this.currentIndex =0;// 当前的索引从1开始  
  23.     var that = this;  
  24.     var t;  
  25.     this.tabMenu[0].className +=" " +this.currentClass;  
  26.     if(autoPlay){  
  27.         clearInterval(t);  
  28.         t = setInterval(function(){  
  29.             that.autoHandler()  
  30.         },playTime);  
  31.     }  
  32.     for(var i=0;i<this.tabMenu.length;i++){  
  33.         this.tabMenu[i]._index = i; //保存当前的索引  
  34.         addEvent(this.tabMenu[i],trigger,function(){  
  35.             that.showItem(this._index);  
  36.             this.currentIndex = this._index;//当前的索引i 保存在变量this.currentIndex里面  
  37.         })  
  38.         this.tabMenu[i].onmouseover = function(){  
  39.             clearInterval(t);  
  40.         }  
  41.         this.tabMenu[i].onmouseout = function(){  
  42.             t = setInterval(function(){  
  43.                 that.autoHandler();  
  44.             },playTime)  
  45.         }  
  46.         for(var j=0;j<this.tabContent.length;j++){  
  47.             this.tabContent[j].onmouseover = function(){  
  48.                 clearInterval(t);  
  49.             }  
  50.             this.tabContent[j].onmouseout = function(){  
  51.                 t = setInterval(function(){  
  52.                     that.autoHandler();  
  53.                 },playTime)  
  54.             }  
  55.         }  
  56.     }     
  57. }  
  58. Slider.prototype = {  
  59.         showItem : function(n){  
  60.             for(var i=0;i<this.tabContent.length;i++){  
  61.                 this.tabContent[i].style.display = "none";  
  62.             }  
  63.             this.clearClass();  
  64.             addClass(this.tabMenu[n],this.currentClass);  
  65.             this.tabContent[n].style.display = "block";  
  66.         },  
  67.         clearClass : function(){  
  68.         for(var k=0;k<this.tabMenu.length;k++){  
  69.             if(hasClass(this.tabMenu[k],this.currentClass)){  
  70.                 delClass(this.tabMenu[k],this.currentClass);  
  71.                 }  
  72.             }  
  73.         },  
  74.         autoHandler : function(){  
  75.             this.currentIndex++;  
  76.             if(this.currentIndex>=this.tabMenu.length){  
  77.                 this.currentIndex = 0;  
  78.             }  
  79.             this.showItem(this.currentIndex);  
  80.         }  
  81.     } 

 注意事项:this.currentIndex = this._index;//当前的索引i 保存在变量this.currentIndex里面  这段代码中 this.currentIndex 改成 that.currentIndex 否则的话会有bug产生,我一开始没有注意到!