js实现手风琴效果

之前在慕课网上有练习手风琴效果,但是老师使用jquery简简单单的两三行实现了,今天自己用js练习一下效果

    <div id="divbox">
        <ul>
            <li class="pic1"><a href="javascript:;">床头明月光</a></li>
            <li class="pic2"><a href="javascript:;">疑似地上霜</a></li>
            <li class="pic3"><a href="javascript:;">举头望明月</a></li>
            <li class="pic4"><a href="javascript:;">低头思故乡</a></li>
        </ul>
    </div>
*{padding: 0;margin: 0;list-style: none}
#divbox{
    width: 1000px;
}
ul{
    width: 1000px;
    height: 300px;
}
ul li{
    height: 300px;
    float: left;/* 
    width: 100px; */
}
ul li a{
    text-decoration: none;
    color:#666;
    width: 100px;
    height: 300px;
    line-height: 300px;
    text-align: center;
    display: block;
    background-color:#fff;
    opacity: 0.3;
}
.pic1{
    background: url('1.png');
}
.pic2{
    background: url('2.png');
}
.pic3{
    background: url('3.png');
}
.pic4{
    background: url('4.png');
}
.active{
    width: 700px;
}
</style>

js代码:

var lis=document.getElementsByTagName('li');   //获取document中的所有li

/*animate动画*/
function ani(obj){
    timer=setInterval(function(){    //设置定时器
        var speed=10;
        if(parseInt(obj.style.width)<700){     //如果传入的对象的宽小于700px
            obj.style.width=parseInt(obj.style.width) speed 'px';   //让当前宽加speed
            speed =10;    //每执行一次定时器,speed 10
        }else{
            return;
        }
    },20);  20ms执行一次定时器
}

for(var i=0;i<lis.length;i  ){   //遍历li数组
    lis[i].index=i;         //循环把i的值赋值给li的index
    var timer;
    lis[i].onmouseover=function(){
        for(var i=0;i<lis.length;i  ){
            lis[i].style.width='100px';    //当鼠标移入到某个li时,遍历循环数组,把所有li的宽都设置为100px
        }
        ani(lis[this.index]);  //使用ani方法,把鼠标移入的li的宽值变为700px

    }
    lis[i].onmouseout=function(){     
        lis[this.index].style.width='100px';       //鼠标移出时,把当前li的宽设置回100px
        clearInterval(timer);      //清除定时器
    }
}

这样就能实现手风琴效果了,但是还有一点点bug,因为li初始化的时候宽度是100px,当鼠标移入li时,li会变为700px,但是鼠标移开时不会按700px的宽度,仍然以100px的宽为准。如果有知道这个问题的小伙伴请大家多多指教指教。

 

用jquery实现非常简单,而且效果非常好:

$(function(){
  $(".handpic ul li").mouseover(function(){
    $(this).stop(true).animate({'width':'700px'},1000).siblings().stop(true).animate({'width':'100px'},1000);
  });
});

如果想要背景图片,请到本人相册下载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值