纯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程序设计有所帮助。