知识点:
javascript的原型链继承
function A(){
}
A.prototype={
}
function B(){
A.call(this);//调用父类构造函数
}
B.prototype=new A;//原型链继承
B.constructor=B;//重新设置构造函数
完成功能:
扩展Focus类 参见:http://www.cnblogs.com/wengxuesong/archive/2013/05/16/3081966.html
添加渐隐渐现效果
自动播放
停止播放
设置切换间隔
设置效果
代码:
1 <style> 2 #focus_view td{ 3 height:200px; 4 } 5 6 </style> 7 <table width="500" border="0" cellspacing="0" cellpadding="0" id="focus_view"> 8 <tr> 9 <td style="background:#f00; display:none;"> </td> 10 <td style="background:#ff0; display:none;"> </td> 11 <td style="background:#f0f; display:none;"> </td> 12 <td style="background:#0f0; display:none;"> </td> 13 <td style="background:#000; display:none;"> </td> 14 <td style="background:#00f; display:none;"> </td> 15 </tr> 16 </table> 17 <button id="focus_prev">上一项</button><button id="focus_next">下一项</button> 18 19 <script> 20 21 /* 22 导入 Focus类 *必需 23 以下代码为不支持IE 24 继承自Focus类,新添加方法 25 play,//播放 26 stop,//停止 27 setSpeed,//间隔 28 setEffect//效果 29 */ 30 var FocusOpacity=function(options){ 31 this._focusItems=options.focusItems; 32 this.autoPlay=options.autoPlay||true; 33 this._speed=options.speed||3000; 34 this._interval=null; 35 this.play(); 36 this.init(); 37 Focus.call(this,this._focusItems,options.callBackFn,options.effectFn); 38 } 39 FocusOpacity.prototype=Focus.prototype;//Focus构造函数里有运行的数据,直接用类原型对象。(重构时解决) 40 FocusOpacity.prototype.constructor=FocusOpacity; 41 FocusOpacity.prototype.setSpeed=function(speed){ 42 this._speed=speed; 43 } 44 FocusOpacity.prototype.play=function(){ 45 var that=this; 46 that._interval= setInterval(function(){that.next()},that._speed) 47 } 48 FocusOpacity.prototype.stop=function(){ 49 this._interval&&clearInterval(this._interval) 50 } 51 FocusOpacity.prototype.setEffect=function(fun){ 52 this._effectFn=fun; 53 } 54 55 //添加每项切换时的过滤动画 56 function playEffect(index,arr){ 57 for(var i=0,len=arr.length;i<len;i++){ 58 arr[i].style.display="none"; 59 } 60 arr[index].style.display="block"; 61 var playTime,old=0; 62 function play(){ 63 old+=0.01 64 if(old>1){ 65 arr[index].style.opacity=1; 66 return clearTimeout(playTime); 67 }; 68 arr[index].style.opacity=old; 69 playTime=setTimeout(function(){ 70 play(); 71 },1); 72 } 73 play(); 74 } 75 77 78 //以下为测试代码 79 80 var prev=document.getElementById("focus_prev"); 81 var next=document.getElementById("focus_next"); 82 83 var focusView=document.getElementById("focus_view"); 84 var focusItems=focusView.getElementsByTagName("td"); 85 86 //声明 87 var fos=new FocusOpacity({'focusItems':focusItems}); 88 //设置切换效果 89 fos.setEffect(playEffect); 90 91 //后一项 92 next.onclick=function(){ 93 fos.next(); 94 } 95 //前一项 96 prev.onclick=function(){ 97 fos.prev(); 98 } 99 //停止 100 focusView.onmouseover=function(){ 101 fos.stop(); 102 } 103 //播放 104 focusView.onmouseout=function(){ 105 fos.play(); 106 } 107 115 </script>
下面就要对现有的两段代码进行重构。
以使结构更合理,方便以后扩展。
未完待续。。。