• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > 网页制作 > DIV+CSS特效 >

仿2010世博会主页焦点flash js代码实现经典幻灯片效果

来源: www.dedecms8.com 编辑:织梦吧 时间:2011-03-04点击:

本次更新对比旧版本精简了一半以上的代码(可以对比一下),强烈推荐喜欢的朋友更新。
如果说之前版本仿2010世博会flash的仿似度是90%,那么本次更新的仿似度则达到了99%,则是说几乎是一摸一样的(欢迎大家挑刺^_^)
其实本次更新只是日后将要发布的myFocus焦点图库的一款样式,也算是其发布前的一次预热吧,呵呵~~
总之,即将发布的myFocus正式版值得大家期待~~^^

7.5更新的代码:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  2. <html xmlns="http://www.w3.org/1999/xhtml"> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  5. <base href="http://hi.baidu.com/koen_li"><!--如果用到相对地址的样式或图片或文件,记得删除这行--> 
  6. <title>myFocus v0.8</title> 
  7. <style type="text/css"> 
  8. *{margin:0;padding:0;border:0;list-style:none;} 
  9. body{background:#eee;padding:20px;} 
  10. .mF_expo2010{position:relative;width:450px;height:296px;overflow:hidden;font:12px/1.5 Verdana,Geneva,sans-serif;background:#fff;} 
  11. .mF_expo2010 .loading{position:absolute;z-index:9999;width:100%;height:100%;color:#666;text-align:center;padding-top:90px;background:#fff url(http://nethd.zhongsou.com/wtimg/i_158290/15250-loading.gif) center -40px no-repeat;}/*载入画面*/ 
  12. .mF_expo2010 .pic li{position:absolute;} 
  13. .mF_expo2010 .pic li img{width:450px;height:296px;}/*图片和焦点图框架一样大小*/ 
  14. .mF_expo2010 .txt li{position:absolute;z-index:2;left:0;width:450px;height:36px;line-height:36px;overflow:hidden;} 
  15. .mF_expo2010 .txt li a{display:block;color:#fff;padding:2px 0 0 16px;font-size:14px;font-weight:bold;text-decoration:none;}/*标题样式*/ 
  16. .mF_expo2010 .txt-bg{position:absolute;bottom:0;z-index:1;width:450px;height:36px;overflow:hidden;background:#000;filter:alpha(opacity=40);opacity:0.4;}/*标题背景*/ 
  17. .mF_expo2010 .num,.mF_expo2010 .num-bg{position:absolute;z-index:3;bottom:8px;right:8px;color:#fff;}/*按钮样式*/ 
  18. .mF_expo2010 .num li,.mF_expo2010 .num-bg li{float:left;width:22px;height:18px;line-height:18px;overflow:hidden;text-align:center;margin-right:1px;cursor:pointer;} 
  19. .mF_expo2010 .num-bg li{background:#fff;filter:alpha(opacity=50);opacity:0.5;}/*按钮背景*/ 
  20. .mF_expo2010 .num li.current,.mF_expo2010 .num li.hover{background:#F60;}/*当前/悬停按钮背景*/ 
  21. </style> 
  22. <script type="text/javascript">
  23. var myFocus={ 
  24.     //Design By Koen @ 2010.7.x 
  25.     //http://hi.baidu.com/koen_li 
  26.     //koen_lee@qq.com 
  27.     $:function(id){return document.getElementById(id);}, 
  28.     $$:function(tag,obj){return (typeof obj=='object'?obj:this.$(obj)).getElementsByTagName(tag);}, 
  29.     linear:function(t,b,c,d){return c*t/d + b;}, 
  30.     easeIn:function(t,b,c,d){return c*(t/=d)*t*t*t + b;}, 
  31.     easeOut:function(t,b,c,d){return -c*((tt=t/d-1)*t*t*t - 1) + b;}, 
  32.     opa:function(obj,v){ 
  33.         if(v!=undefined) {vv=v>100?100:(v<0?0:v); obj.style.filter = "alpha(opacity=" + v + ")"; obj.style.opacity = (v / 100);} 
  34.         else return (document.all)?((obj.filters.alpha)?obj.filters.alpha.opacity:100):((obj.style.opacity)?obj.style.opacity*100:100); 
  35.     }, 
  36.     move:function(obj,dir,val,type,spd,fn){ 
  37.         var t=0,b=parseInt(obj.style[dir])||0,c=val-b,d=spd||50,st=type||'linear',m=c>0?'ceil':'floor'; 
  38.         if(obj[dir+'timer']) clearInterval(obj[dir+'timer']); 
  39.         obj[dir+'timer']=setInterval(function(){ 
  40.             if(t<d){obj.style[dir]=Math[m](myFocus[st](t++,b,c,d))+'px';} 
  41.             else {clearInterval(obj[dir+'timer']);fn&&fn.call(myFocus);} 
  42.         },10);return this; 
  43.     }, 
  44.     fade:function(obj,type,spd,fn){ 
  45.         var o=this.opa(obj),m=spd||5; 
  46.         if(o==0) obj.style.display=''
  47.         if(type=='out') m=-m; 
  48.         if(obj.fadeTimer) clearInterval(obj.fadeTimer); 
  49.         obj.fadeTimer=setInterval(function(){ 
  50.             o+=m;myFocus.opa(obj,o);
  51.             if(o<=0) obj.style.display='none'
  52.             if(o>=100||o<=0){clearInterval(obj.fadeTimer);fn&&fn.call(myFocus);} 
  53.         },10);return this; 
  54.     }, 
  55.     addList:function(obj,cla,arr){ 
  56.         var s=[],n=this.$$('li',this.$$('ul',obj)[0]).length,num=cla.length; 
  57.         for(var j=0;j<num;j++){ 
  58.             s.push('<ul class='+cla[j]+'>'); 
  59.             for(var i=0;i<n;i++){s.push('<li>'+(cla[j]=='num'?(i+1):(cla[j]=='txt'?this.$$('li',obj)[i].innerHTML.replace(/\<img.*?\>/i,this.$$('img',obj)[i].alt):''))+'<span></span></li>')}; 
  60.             s.push('</ul>'); 
  61.         }; obj.innerHTML+=s.join(''); 
  62.     }, 
  63.     setting:function(par){//设置DOM/文档加载就绪后执行的任务 
  64.         if(window.attachEvent){window.attachEvent('onload',function(){myFocus[par.style](par)});} 
  65.         else{window.addEventListener('load',function(){myFocus[par.style](par)},false);} 
  66.     }, 
  67.     mF_expo2010:function(par){ 
  68.         var box=this.$(par.id),t=par.time*1000; 
  69.         this.addList(box,['txt-bg','txt','num-bg','num']); 
  70.         var pic=this.$$('ul',box)[0],txt=this.$$('ul',box)[2],num=this.$$('ul',box)[4],img=this.$$('li',pic),tip=this.$$('li',txt); 
  71.         var H=tip[0].clientHeight+60; 
  72.         var n=img.length; 
  73.         var index=0
  74.         for(var i=0;i<img.length;i++){this.opa(img[i],0); img[i].style.display='none'; tip[i].style.bottom=-H+'px'} 
  75.         box.removeChild(this.$$('div',box)[0]); 
  76.         this.fade(img[index],'in'); 
  77.         this.move(tip[index],'bottom',0,'easeOut',40) 
  78.         this.$$('li',num)[index].className='current'
  79.         var run=function(idx){ 
  80.             myFocus.fade(img[index],'out'); 
  81.             myFocus.move(tip[index],'bottom',-H,'easeIn',10); 
  82.             myFocus.$$('li',num)[index].className=''
  83.             if(index==n-1) index=-1; 
  84.             var N=idx!=undefined?idx:index+1; 
  85.             myFocus.fade(img[N],'in'); 
  86.             myFocus.move(tip[N],'bottom',0,'easeOut',40); 
  87.             myFocus.$$('li',num)[N].className='current'
  88.             index=N
  89.         } 
  90.         var auto=setInterval(function(){run()},t); 
  91.         for (var j=0;j<n;j++){ 
  92.             this.$$('li',num)[j].j=j; 
  93.             this.$$('li',num)[j].onclick=function(){run(this.j)} 
  94.             this.$$('li',num)[j].onmouseover=function(){if(!this.className) this.className = 'hover';} 
  95.             this.$$('li',num)[j].onmouseout=function(){if(this.className=='hover') this.className ='';} 
  96.         } 
  97.         box.onmouseover=function(){clearInterval(auto);} 
  98.         box.onmouseout=function(){auto=setInterval(function(){run()},t);} 
  99.     } 
  100. myFocus.setting({style:'mF_expo2010',id:'myFocus',time:2});//style为风格样式,id为焦点图ID,time为每帧间隔时间(秒) 
  101. //之后推出的myFocus正式版将会有更多的样式、更强大的效果及更详细的文档描述,敬请期待!^_^  
  102. </script> 
  103. </head> 
  104. <body> 
  105. <div id="myFocus" class="mF_expo2010"> 
  106.     <div class="loading"><span>请稍候...</span></div><!--载入画面--> 
  107.     <ul class="pic"><!--内容列表--> 
  108.         <li><a href="#"><img src="http://pigimg.zhongso.com/space/gallery/infoimgs/gc/gcqzj/20100510/2010051018042735524.jpg" alt="图片1来源于网络,版权属于作者" /></a></li><!--alt的内容为标题--> 
  109.         <li><a href="#"><img src="http://pigimg.zhongso.com/space/gallery/infoimgs/gc/gcqzj/20100510/2010051018044355191.jpg" alt="图片2来源于网络,版权属于作者" /></a></li> 
  110.         <li><a href="#"><img src="http://pigimg.zhongso.com/space/gallery/infoimgs/gc/gcqzj/20100510/2010051018050315609.jpg" alt="图片3来源于网络,版权属于作者" /></a></li> 
  111.         <li><a href="#"><img src="http://pigimg.zhongso.com/space/gallery/infoimgs/gc/gcqzj/20100510/2010051018055365260.jpg" alt="图片4,更多精彩请点击进入我的空间^^" /></a></li> 
  112.     </ul> 
  113. </div> 
  114. </body> 
  115. </html> 

===========原贴============

不知大家发现没有,最近腾讯有关的网站焦点flash都是类似2010上海世博主页的那种格式,而且百度贴吧主页也做成了这样的格式,貌似很流行哦?。。遗憾的是它们都是flash做的,或是基于jquery库/IE滤镜(只模仿了渐变),找遍网络好像都找不到我想要的JS格式,只好自己动手做一个。看效果(已更新,共4款):

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  2. <html xmlns="http://www.w3.org/1999/xhtml"> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  5. <base href="http://hi.baidu.com/koen_li"><!--如果用到相对地址的样式或图片,记得删除这行哦。。。--> 
  6. <title>JS仿2010世博会主页焦点flash V2.1</title> 
  7. <style type="text/css"> 
  8. *{margin:0;padding:0;border:0;list-style:none;} 
  9. body{padding:20px;background:#eee;} 
  10. #myFocus{width:450px;height:296px;position:relative;overflow:hidden;font-family:Verdana, Arial, Helvetica, sans-serif;background:#fff;}/*焦点图大小,可按需要是否加边框*/ 
  11. #myFocus .loading{position:absolute;z-index:9999;width:450px;height:296px;background:#fff url(http://nethd.zhongsou.com/wtimg/i_158290/15250-loading.gif) center -40px no-repeat;color:#666;font-size:12px;text-align:center;padding-top:90px;}/*载入画面*/ 
  12. #myFocus .pics li{position:absolute;top:0px;left:0px;} 
  13. #myFocus .pics li img{filter:alpha(opacity=0);opacity:0;width:450px;height:296px;}/*图片大小*/ 
  14. #myFocus .ts li{position:absolute;z-index:2;left:0;bottom:-32px;height:32px;line-height:32px;padding-left:16px;overflow:hidden;} 
  15. #myFocus .ts li a{color:#fff;font-size:14px;font-weight:bold;text-decoration:none;}/*标题样式*/ 
  16. #myFocus .tsBg{position:absolute;bottom:0;z-index:1;width:450px;height:36px;background:#000;filter:alpha(opacity=40);opacity:0.4;}/*标题背景*/ 
  17. #myFocus .btn,#myFocus .btnBg{position:absolute;z-index:3;bottom:8px;right:8px;color:#fff;font-size:12px;}/*按钮样式*/ 
  18. #myFocus .btn li,#myFocus .btnBg li{float:left;width:22px;height:18px;line-height:18px;overflow:hidden;text-align:center;margin-right:1px;cursor:pointer;} 
  19. #myFocus .btnBg li{background:#fff;filter:alpha(opacity=50);opacity:0.5;}/*按钮背景*/ 
  20. #myFocus .btn li.current,#myFocus .btn li.hover {background:#F60;}/*当前/悬停按钮背景*/ 
  21. </style> 
  22. <script type="text/javascript"> 
  23. /*design by koen @ 10nian5yue8ri*/ 
  24. /*http://hi.baidu.com/koen_li*/ 
  25. function setMyFocus(ID,t){//主函数... 
  26. function $(id) {return document.getElementById(id);} 
  27. function $$(tag,obj){return (typeof obj=='object'?obj:$(obj)).getElementsByTagName(tag);} 
  28. function poptit(n){//文字上下运动函数 
  29.     var ts = $$('li',tit); 
  30.     var H = ts[n].clientHeight; 
  31.     var setway=function(obj,y){obj.style.bottom=y+'px';} 
  32.     var getway=function(obj){return parseInt(obj.style.bottom);} 
  33.     var y1,y2; 
  34.     var up=function(){ 
  35.         y1=getway(ts[n]); 
  36.         if (ts[n].movement) clearTimeout(ts[n].movement);//为了兼容变化中的点击 
  37.         if (y1 == 0) return true; 
  38.         y1+=Math.ceil((0 - y1) / 5); 
  39.         setway(ts[n],y1); 
  40.         if(y1<0) ts[n].movement = setTimeout(up, 1); 
  41.     } 
  42.     var down=function(){ 
  43.         y2=getway(ts[N]); 
  44.         if (ts[N].movement) clearTimeout(ts[N].movement); 
  45.         if (y2 == -H) return true; 
  46.         y2+=Math.floor((-H - y2) / 5); 
  47.         setway(ts[N],y2); 
  48.         if(y2>-H) ts[N].movement = setTimeout(down, 1); 
  49.     } 
  50.     for(var i=0;i<ts.length;i++){ 
  51.         if (!ts[i].style.bottom) ts[i].style.bottom = -H+'px'; 
  52.         if(ts[i].name=='up') var N=i
  53.     } 
  54.     if(!N&&n==0) {//开始载入... 
  55.         ts[n].name='up'
  56.         var y1=getway(ts[n]); 
  57.         up(); 
  58.         return true; 
  59.     }  
  60.     if(N==n) return true;//防止快速移出移入的抖动 
  61.     ts[N].name=''//标记淡入的name为空 
  62.     ts[n].name='up'
  63.     down(); 
  64.     up(); 
  65. function opa(n){//图片淡入淡出函数 
  66.     var pics = $$('img',pic); 
  67.     var setfade=function(obj,o){ 
  68.         if (document.all) obj.style.filter = "alpha(opacity=" + o + ")"; 
  69.         else obj.style.opacity = (o / 100); 
  70.     }; 
  71.     var getfade=function(obj){ 
  72.         return (document.all)?((obj.filters.alpha)?obj.filters.alpha.opacity:false):((obj.style.opacity)?obj.style.opacity*100:false); 
  73.     } 
  74.     var show=function(){ 
  75.         if(pics[n].move) clearTimeout(pics[n].move); 
  76.         if (o1 >= 100) return true; 
  77.         o1+=5; 
  78.         setfade(pics[n],o1); 
  79.         pics[n].move=setTimeout(show,1); 
  80.     }; 
  81.     var hide=function(){ 
  82.         if(pics[N].move) clearTimeout(pics[N].move); 
  83.         if (o2 <= 0) {pics[N].style.display='none';return true;} 
  84.         o2-=5
  85.         setfade(pics[N],o2); 
  86.         pics[N].move=setTimeout(hide,1); 
  87.     }; 
  88.     for(var i=0;i<pics.length;i++){ 
  89.         if(!getfade(pics[i])) {setfade(pics[i],0);pics[i].style.display='none';} 
  90.         if(pics[i].name=='out') var N=i
  91.     } 
  92.     if(!N&&n==0) {//开始载入... 
  93.         pics[n].name='out'
  94.         pics[n].style.display=''
  95.         var o1=getfade(pics[n]); 
  96.         show(); 
  97.         return true; 
  98.     } 
  99.     if(N==n) return true; 
  100.     pics[N].name='' 
  101.     pics[n].name='out'
  102.     pics[n].style.display=''
  103.     var o1=getfade(pics[n]); 
  104.     var o2=getfade(pics[N]); 
  105.     hide(); 
  106.     show();
  107. function classNormal() {//数字标签样式清除 
  108.     var focusBtnList = $$('li',btn); 
  109.     for (var i = 0; i < focusBtnList.length; i++) { 
  110.         focusBtnList[i].className = ''
  111.     } 
  112. function autoFocusChange() {//自动运行 
  113.     if (atuokey) return; 
  114.     var focusBtnList = $$('li',btn); 
  115.     for (var i = 0; i < focusBtnList.length; i++) { 
  116.         if (focusBtnList[i].className == 'current') { 
  117.             var currentNum = i
  118.         } 
  119.     } 
  120.     if(currentNum<focusBtnList.length-1){ 
  121.         poptit(currentNum+1); 
  122.         opa(currentNum+1); 
  123.         classNormal(); 
  124.         focusBtnList[currentNum+1].className = 'current'
  125.     }else if(currentNum==focusBtnList.length-1){ 
  126.         poptit(0); 
  127.         opa(0); 
  128.         classNormal(); 
  129.         focusBtnList[0].className = 'current'
  130.     } 
  131. function focusChange() {//交互切换 
  132.     var focusBtnList = $$('li',btn); 
  133.     for (var i = 0; i < focusBtnList.length; i++) { 
  134.         focusBtnList[i].I=i
  135.         focusBtnList[i].onclick = function(){ 
  136.             poptit(this.I); 
  137.             opa(this.I); 
  138.             classNormal(); 
  139.             focusBtnList[this.I].className = 'current'
  140.         } 
  141.         focusBtnList[i].onmouseover = function(){ 
  142.             if(!this.className) this.className = 'hover' 
  143.         } 
  144.         focusBtnList[i].onmouseout = function(){ 
  145.             if(this.className=='hover') this.className =''
  146.         } 
  147.     } 
  148. function init(){//初始化 
  149.     $(ID).removeChild($$('div',ID)[2]); 
  150.     opa(0); 
  151.     poptit(0); 
  152.     classNormal(); 
  153.     $$('li',$$('div',ID)[4])[0].className = 'current'
  154.     $(ID).onmouseover = function() { 
  155.         atuokey = true
  156.         clearInterval(auto); 
  157.     } 
  158.     $(ID).onmouseout = function() { 
  159.         atuokey = false
  160.         auto=setInterval(autoFocusChange, T); 
  161.     } 
  162. var ul=$$('ul',ID)[0]; 
  163. var li=$$('li',ul); 
  164. var NUM=li.length; 
  165. var s1='<div class="tsBg"></div><div class="btnBg"><ul>';for(var i=0;i<NUM;i++){s1+='<li></li>'};s1+='</ul></div>'; 
  166. var s2='<div class="ts"><ul>'
  167. for(var i=0;i<NUM;i++){var a=$$('a',li[i])[0];var img=$$('img',li[i])[0];s2+='<li><a href="'+a.href+'">'+img.alt+'</a></li>'};s2+='</ul></div>'; 
  168. var s3='<div class="btn"><ul>'
  169. for(var i=0;i<NUM;i++){s3+='<li>'+(i+1)+'</li>'};s3+='</ul></div>'; 
  170. $(ID).innerHTML=s1+$(ID).innerHTML+s2+s3; 
  171. //生成HTML结束 
  172. var pic=$$('div',ID)[3]; 
  173. var tit=$$('div',ID)[4]; 
  174. var btn=$$('div',ID)[5]; 
  175. var atuokey = ''
  176. var auto=''
  177. var T=t*1000;//每帧图片停留的时间,11000=1秒 
  178.     init(); 
  179.     focusChange(); 
  180.     auto=setInterval(autoFocusChange, T); 
  181. window.onload=function(){ 
  182.     setMyFocus('myFocus',3) 
  183. </script> 
  184. </head> 
  185. <body> 
  186. <div id="myFocus"> 
  187. <div class="loading">请稍候...</div><!--载入画面--> 
  188. <div class="pics"> 
  189.     <ul> 
  190.         <li><a href="#"><img src="http://pigimg.zhongso.com/space/gallery/infoimgs/gc/gcqzj/20100510/2010051018042735524.jpg" alt="图片1来源于网络,版权属于作者" /></a></li><!--alt的内容为标题--> 
  191.         <li><a href="#"><img src="http://pigimg.zhongso.com/space/gallery/infoimgs/gc/gcqzj/20100510/2010051018044355191.jpg" alt="图片2来源于网络,版权属于作者" /></a></li> 
  192.         <li><a href="#"><img src="http://pigimg.zhongso.com/space/gallery/infoimgs/gc/gcqzj/20100510/2010051018050315609.jpg" alt="图片3来源于网络,版权属于作者" /></a></li> 
  193.         <li><a href="#"><img src="http://pigimg.zhongso.com/space/gallery/infoimgs/gc/gcqzj/20100510/2010051018055365260.jpg" alt="图片4,更多精彩请点击进入我的空间^^" /></a></li> 
  194.     </ul> 
  195. </div> 
  196. </div> 
  197. </body> 
  198. </html> 

因为本人JS水平有限,制作过程遇到很多问题都是通过搜索或在这里提问,后来发现 原来论坛早已有人做过类似的:http://bbs.blueidea.com/thread-2911266-1-3.html,但幸好,还不是完全相 同的^_^。例如:朋友那个是一帧跟着一帧运动,而我这个是2帧甚至多帧的同时运动(如果你点击的足够快),所要处理/考虑的情况比朋友那个要复杂的多, 这也是代码有点多的最大原因。当然,这个开始的loading切入我是模仿这位朋友的,希望不要介意^_^。

使用说明(5.12更新):直接复制套用或调用setMyFocus(ID,t);即可(ID为焦点容器id,t为每 帧停留时间单位秒);其余的包括更改焦点图大小、添加更多的帧或自定义样式等等只需修改HTML/CSS,无需修改参数/JS代码,如添加一帧/图片只需 在HTML中增加一行“<li>(你的图片)</li>”即可。HTML结构如下:

  1. <div id="myFocus"><!--焦点图容器ID--> 
  2.   <div class="loading">请稍候...</div><!--载入画面--> 
  3.   <div class="pics"><!--焦点图内容--> 
  4.     <ul> 
  5.       <li><a href="#"><img src="#" alt="图片1来源于网络,版权属于作者" /></a></li><!--alt的内容为标题--> 
  6.       <li><a href="#"><img src="#" alt="图片2来源于网络,版权属于作者" /></a></li> 
  7.       <li><a href="#"><img src="#" alt="图片3来源于网络,版权属于作者" /></a></li> 
  8.       <li><a href="#"><img src="#" alt="图片4来源于网络,版权属于作者" /></a></li> 
  9.     </ul> 
  10.   </div> 
  11. </div> 

以上代码皆兼容包括IE系列、火狐系列、谷歌系列等现代浏览器,细心的网友可能会发现其在各个浏览器中运行速度不同,其中谷歌、某些版本的火狐运行比较 快、而IE8、某些版本的火狐运行慢一些,而我这个是在IE6中测试和作标准的,这个问题已经开帖请教经典论坛里的达 人:http://bbs.blueidea.com/thread-2983483-1-2.html,但目前似乎没有解决的办法,如果朋友们有什么好 的解决方案或程序发现什么bug、or进一步的优化代码,欢迎提出^_^

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1170734538@qq.com ,  QQ