之前在慕课网上有练习手风琴效果,但是老师使用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);
  });
});

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

最新文章

  1. Groovy入门经典 随书重点
  2. 试图删除 xx 和yy之间的关系。但是,关系的其中一个外键 (xx_yy.xxID) 无法设置为 null。
  3. Android学习系列(41)--Android Studio简单使用
  4. sql-server数据库中利用触发器实现表与表之间的级联删除
  5. Socket与TcpClient的区别(转载)
  6. JAVA类与对象(四)----成员变量与局部变量 、成员方法、构造方法
  7. poj2528(线段树+离散化)Mayor&#39;s posters
  8. 编译安装vim8.0
  9. xamarin android——数据绑定到控件(二)
  10. 红豆带你从零学C#系列—Visual Studio工具介绍、下载和安装
  11. 201521123056 《Java程序设计》第8周学习总结
  12. css 自制一些小特效
  13. Android IPC机制基础
  14. mybatis教程5(延迟加载和缓存)
  15. Mac 安装 Jenkins
  16. !important 的绝对控制样式
  17. 【转】以太网帧、IP报文格式
  18. FLINK SQL Calcite原理
  19. 2018-2019-2 网络对抗技术 20165324 Exp5:MSF基础应用
  20. ejb 和pojo , jboss 和 tomcat

热门文章

  1. 【问题记录】Python运行报错:can only concatenate str (not &quot;int&quot;) to str
  2. shell-003:用for循环统计内存使用量
  3. POJ_2431 Expedition 【数据结构】
  4. UVA - 11584 DP 最少线段覆盖
  5. matlab实用教程
  6. [转] 从零开始学Spring Boot
  7. oracle12C--DG FAR SYNC 部署(前提为搭建好12C的DG)
  8. 让C:\Users文件夹放在D盘
  9. oracle trim不掉空白字符分享(转)
  10. isqlplus的使用