js以及jquery实现手风琴效果
最近又复习了jQuery的知识,既然jQuery是javascript的一个库。jQuery能做到的事情javascript也能做到。因此用这两种方法实现了图片手风琴效果。
按照惯例,还是上代码吧,因为代码里有我的注释也就相当于解释了!
先看一下javascript的代码吧:
div布局:注意哦,里面的图片我们用js代码生成
<divid="box"> <ul> <li></li> <li></li> <li></li> <li></li> <li></li> </ul> </div>
css样式:
<styletype="text/css">
*{
margin:0;
padding:0;
}
ul{
list-style:none;
}
#box{
width:1150px;
height:400px;
margin:50pxauto;
border:1pxsolidred;
overflow:hidden;
}
#boxul{
width:1300px;
}
#boxulli{
width:240px;
height:400px;
float:left;
}
</style>
要写js代码了。这里封装了一个完整的运动框架(我个人觉得哈,你可以继续完善,不过你要告诉我,我也学习一下!)
/*
*实现动画的步骤:
1.怎样得到当前的样式封装一个函数getStyle()
2.步长的计算用(目标位置-当前的样式)/10
3.缓动动画原理:盒子本身的样式+步长(不断变化的)
*/
/*
*css设置透明度,一般在ie中用的是filter:alpha(opacity=0);
而在firefox中,一般就是直接使用opacity:0
*/
//多个属性的运动框架以及添加回调函数
functionanimate(obj,json,fn){//目标objjson属性:属性值fn回调函数
clearInterval(obj.timer);
obj.timer=setInterval(function(){
varflag=true;//用来判断是否停止定时器
//遍历json
for(varattrinjson){//attr属性json[attr]值
varcurStyle=0;
if(attr=="opacity"){
curStyle=parseInt(getStyle(obj,attr)*100);
}else{
curStyle=parseInt(getStyle(obj,attr));//获得数值
}
//得到步长目标位置就是json[attr]
varstep=(json[attr]-curStyle)/10;
step=step>0?Math.ceil(step):Math.floor(step);
//判断透明度
if(attr=="opacity"){//判断用户有没有输入opacity
if("opacity"inobj.style){
obj.style.opacity=(curStyle+step)/100;
}else{
obj.style.filter="alpha(opacity="+(curStyle+step)+")";
}
}elseif(attr=="zIndex"){
obj.style.zIndex=json[attr];
}else{
obj.style[attr]=curStyle+step+"px";
}
//判断是否已经都到了目标位置只要其中一个不满足条件就不应该停止定时器
if(curStyle!=json[attr]){
flag=false;
}
}
//判断定时器条件是否该停止了
if(flag){
clearInterval(obj.timer)
//当定时器停止后,动画也就结束了.如果有回调函数就执行回调函数
if(fn){
fn();
}
}
},30);
}
//封装函数得到属性
functiongetStyle(obj,attr){//谁的那个属性
if(obj.currentStyle)//ie等
{
returnobj.currentStyle[attr];//返回传递过来的某个属性
}
else
{
returnwindow.getComputedStyle(obj,null)[attr];//w3c浏览器
}
}
接着我们在js里面引入我们写的框架
<scriptsrc="animate.js"></script>
接下来,写js代码
<script>
window.onload=function(){
varbox=document.getElementById("box");
varlis=box.children[0].children;
for(vari=0;i<lis.length;i++){
lis[i].style.backgroundImage="url(images/"+(i+1)+".jpg)";
lis[i].onmouseover=function(){
for(varj=0;j<lis.length;j++){
animate(lis[j],{width:100});
}
animate(this,{width:800});
}
lis[i].onmouseout=function(){
for(vark=0;k<lis.length;k++){
animate(lis[k],{width:240});
}
}
}
}
</script>
好啦,这样就完成了,具体效果你自己动手看看吧。完整的下载地址为js版本的手风琴效果
写完了js,发现代码量好多啊,看看jquery代码,哦买嘎,切记一定要先引入jQuery的包,再写代码哈!
<scriptsrc="jquery-1.11.1.min.js"></script>
<script>
$(function(){
$("#boxli").each(function(index,ele){
$(ele).css("background","url(images/"+(index+1)+".jpg)");
}).mouseenter(function(){
$(this).stop().animate({width:800},500).siblings("li").stop().animate({width:100},500);
}).mouseleave(function(){
$("#boxli").stop().animate({width:240},500);
});
});
</script>
精简了好多。
来吧,我们的jQuery版本手风琴效果下载地址
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。