纯js实现手风琴效果
本文分享了纯js+html制作手风琴和纯css+html制作手风琴两种效果,供大家参考,具体内容如下
一、纯css+html的手风琴效果
这种用css写的手风琴比较简单,主要是应用到css中的,transition属性。
代码如下:
<!DOCTYPEHTML> <html> <head> <style> body{background:url('bg.gif')repeat;} ul,li,p{margin:0px;padding:0px;list-style:none;} #div{width:1180px;height:405px;border:5pxsolid#ccc;padding:0px;margin:0pxauto;overflow:hidden;} .list{width:3200px;} .listli{float:left;width:170px;height:500px;;position:relative; -moz-transition:width2s; transition:width2s; -moz-transition:width2s;/*Firefox4*/ -webkit-transition:width2s;/*Safari和Chrome*/ -o-transition:width2s;/*Opera*/ } .list:hoverli{width:107px;} .listli:hover{width:538px;} .listlip{width:100%;height:100%;opacity:0.5;position:absolute;top:0px;left:0px;background:black;} .listli:hoverp{opacity:0} </style> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/> <title></title> <scripttype="text/javascript"> </script> </head> <body> <divid="div"> <ulclass="list"><!--如果设置父级与子级之间没有空隙的话,将margin和padding设为0即可--> <li><imgsrc="image/1.jpg"style="width:538px;height:405px;"><p></p></li> <li><imgsrc="image/2.jpg"style="width:538px;height:405px;"><p></p></li> <li><imgsrc="image/3.jpg"style="width:538px;height:405px;"><p></p></li> <li><imgsrc="image/4.jpg"style="width:538px;height:405px;"><p></p></li> <li><imgsrc="image/5.jpg"style="width:538px;height:405px;"><p></p></li> <li><imgsrc="image/6.jpg"style="width:538px;height:405px;"><p></p></li> <li><imgsrc="image/7.jpg"style="width:538px;height:405px;"><p></p></li> </ul> </div> </body> </html>
二、纯js+html制作手风琴
这个手风琴出现一个问题,就是单独移动每个li时,没问题,但是当移动很快时,最右边的li出现空隙。我感觉是定时器的问题,就是当每个li还没回到自己的位置时,下一个li就开始运动了。但我定时器已经关了啊。
麻烦哪位给我留言,帮我看看怎么改哈!
代码如下:
<!DOCTYPEHTML> <html> <head> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/> <title>手风琴效果</title> <linkhref="style.css"rel="stylesheet"type="text/css"/> <scriptsrc="perfectMove2.js"></script> <scripttype="text/javascript"> window.onload=function() { varoDiv=document.getElementById('show1'); variMinWidth=9999999; varaLi=oDiv.getElementsByTagName('li'); varaSpan=oDiv.getElementsByTagName('span'); vari=0; varbool=false; for(i=0;i<aLi.length;i++) { aSpan[i].index=i; aSpan[i].onmouseover=function() { for(i=0;i<aLi.length;i++) { startMove(aLi[i],{width:this.offsetWidth});//调用运动函数 bool=true; } if(bool) { startMove(aLi[this.index],{width:552}); } } } }; </script> </head> <body> <divid="show1"> <ul> <liclass="active"> <spanclass="bg0">这是第一个</span> <imgsrc="images/1.jpg"/> </li> <li> <spanclass="bg1">这是第二个</span> <imgsrc="images/2.jpg"/> </li> <li> <spanclass="bg2">这是第三个</span> <imgsrc="images/3.jpg"/> </li> <li> <spanclass="bg3">这是第四个</span> <imgsrc="images/4.jpg"/> </li> <li> <spanclass="bg4">这是第五个</span> <imgsrc="images/5.jpg"/> </li> <li> <spanclass="bg5">这是第六个</span> <imgsrc="images/6.jpg"/> </li> </ul> </div> </body> </html>
perfectMove2.js代码如下:
functiongetStyle(obj,attr)//用此种方法获取样式中的属性 { if(obj.currentStyle) { returnobj.currentStyle[attr]; } else { returngetComputedStyle(obj,false)[attr]; } } functionstartMove(obj,json,fn) { clearInterval(obj.timer);//清除定时器 obj.timer=setInterval(function() { varstop=true; for(varattrinjson) { variCur=0; if(attr=='opacity') { iCur=parseInt(parseFloat(getStyle(obj,attr))*100);//这里加parseInt是避免div的数值不稳定,在波动 } else { iCur=parseInt(getStyle(obj,attr)); } variSpeed=(json[attr]-iCur)/8; iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed); if(iCur!=json[attr]) { stop=false; } if(attr=='opacity') { obj.style.filter='alpha(opacity:'+(iCur+iSpeed)+')'; obj.style.opacity=(iCur+iSpeed)/100; } else { obj.style[attr]=iCur+iSpeed+'px'; } } if(stop) { clearInterval(obj.timer); if(fn){fn();} } },30) }
以上就是本文的全部内容,希望对大家学习javascript程序设计有所帮助。