纯js实现手风琴效果


Posted in Javascript onApril 17, 2020

本文分享了纯js+html制作手风琴和纯css+html制作手风琴两种效果,供大家参考,具体内容如下

一、纯css+html的手风琴效果

这种用css写的手风琴比较简单,主要是应用到css中的,transition属性。

代码如下:

<!DOCTYPE HTML>
<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:5px solid #ccc;padding: 0px;margin: 0px auto;overflow: hidden;} 
 .list{width: 3200px;}
 .list li{float: left;width: 170px;height: 500px;;position: relative;
  -moz-transition:width 2s;
  transition: width 2s;
  -moz-transition: width 2s; /* Firefox 4 */
  -webkit-transition: width 2s; /* Safari 和 Chrome */
  -o-transition: width 2s; /* Opera */
 }
.list:hover li{width: 107px;}
.list li:hover{width: 538px;}
.list li p{width: 100%;height: 100%;opacity: 0.5;position: absolute;top: 0px;left: 0px;background: black; }
.list li:hover p{opacity:0}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript">
</script>
</head>
<body >
<div id="div">
  <ul class="list"> <!--如果设置父级与子级之间没有空隙的话,将margin和padding设为0即可-->
   <li><img src="image/1.jpg" style="width:538px;height:405px;"><p></p></li>
   <li><img src="image/2.jpg" style="width:538px;height:405px;"><p></p></li>
   <li><img src="image/3.jpg" style="width:538px;height:405px;"><p></p></li>
   <li><img src="image/4.jpg" style="width:538px;height:405px;"><p></p></li>
   <li><img src="image/5.jpg" style="width:538px;height:405px;"><p></p></li>
   <li><img src="image/6.jpg" style="width:538px;height:405px;"><p></p></li>
   <li><img src="image/7.jpg" style="width:538px;height:405px;"><p></p></li>
  </ul>
</div>
</body>
</html>

二、纯js+html制作手风琴

这个手风琴出现一个问题,就是单独移动每个li时,没问题,但是当移动很快时,最右边的li出现空隙。我感觉是定时器的问题,就是当每个li还没回到自己的位置时,下一个li就开始运动了。但我定时器已经关了啊。

麻烦哪位给我留言,帮我看看怎么改哈! 

代码如下:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>手风琴效果</title>
<link href="style.css" rel="stylesheet" type="text/css" />
<script src="perfectMove2.js"></script>
<script type="text/javascript">
window.onload=function()
{
 var oDiv=document.getElementById('show1');
 var iMinWidth=9999999;
 var aLi=oDiv.getElementsByTagName('li');
 var aSpan=oDiv.getElementsByTagName('span');
 var i=0;
 var bool=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>
<div id="show1">
 <ul>
  <li class="active">
   <span class="bg0">这是第一个</span>
   <img src="images/1.jpg" />
  </li>
  <li >
   <span class="bg1">这是第二个</span>
   <img src="images/2.jpg" />
  </li>
  <li >
   <span class="bg2">这是第三个</span>
   <img src="images/3.jpg" />
  </li>
  <li>
   <span class="bg3">这是第四个</span>
   <img src="images/4.jpg" />
  </li>
  <li>
   <span class="bg4">这是第五个</span>
   <img src="images/5.jpg" />
  </li>
  <li>
   <span class="bg5">这是第六个</span>
   <img src="images/6.jpg" />
  </li>
 </ul>
</div>
</body>
</html>

perfectMove2.js代码如下:

function getStyle(obj,attr)//用此种方法获取样式中的属性
{
  if(obj.currentStyle)
  {
  return obj.currentStyle[attr];
  }
  else
  {
  return getComputedStyle(obj,false)[attr];
  }
}
function startMove(obj,json,fn)
{
  clearInterval(obj.timer);//清除定时器
  obj.timer=setInterval(function ()
  {
  var stop=true;
  for(var attr in json)
  {
      var iCur=0;
      if(attr=='opacity')
      {
       iCur=parseInt(parseFloat(getStyle(obj, attr))*100);//这里加parseInt是避免div的数值不稳定,在波动
      }
      else
     {
       iCur=parseInt(getStyle(obj, attr));
     }
      var iSpeed=(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程序设计有所帮助。

Javascript 相关文章推荐
JQuery中操作Css样式的方法
Feb 12 Javascript
js中for in语句的用法讲解
Apr 24 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
Nov 24 Javascript
轻松掌握JavaScript中的Math object数学对象
May 26 Javascript
webpack学习笔记之优化缓存、合并、懒加载
Aug 24 Javascript
强大的JavaScript响应式图表Chartist.js的使用
Sep 13 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
Nov 13 Javascript
vue踩坑记录之数组定义和赋值问题
Mar 20 Javascript
基于axios 的responseType类型的设置方法
Oct 29 Javascript
JS判断浏览器类型与操作系统的方法分析
Apr 30 Javascript
JavaScript编码小技巧分享
Sep 17 Javascript
vue 如何从单页应用改造成多页应用
Oct 23 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
Apr 04 #Javascript
Angular 根据 service 的状态更新 directive
Apr 03 #Javascript
jQuery中的Deferred和promise 的区别
Apr 03 #Javascript
再次谈论React.js实现原生js拖拽效果引起的一系列问题
Apr 03 #Javascript
jQuery qrcode生成二维码的方法
Apr 03 #Javascript
Node.js 应用跑得更快 10 个技巧
Apr 03 #Javascript
AngularJs 60分钟入门基础教程
Apr 03 #Javascript
You might like
帅气的琦玉老师
2020/03/02 日漫
php录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
PHP实现服务器状态监控的方法
2014/12/09 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
PHP设计模式(一)工厂模式Factory实例详解【创建型】
2020/05/02 PHP
理解Javascript闭包
2013/11/01 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
探讨:JavaScript ECAMScript5 新特性之get/set访问器
2016/05/05 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
js对象浅拷贝和深拷贝详解
2016/09/05 Javascript
jQuery中的on与bind绑定事件区别实例详解
2017/02/28 Javascript
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
vue2.0实现前端星星评分功能组件实例代码
2018/02/12 Javascript
3种vue路由传参的基本模式
2018/02/22 Javascript
jQuery实现获取动态添加的标签对象示例
2018/06/28 jQuery
vue--点击当前增加class,其他删除class的方法
2018/09/15 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
使用jQuery实现购物车
2020/10/29 jQuery
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
介绍Python的@property装饰器的用法
2015/04/28 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
FC-Moto英国:欧洲最大的摩托车服装和头盔商店之一
2019/08/25 全球购物
校长岗位职责
2013/11/26 职场文书
《大自然的语言》教学反思
2014/04/08 职场文书
协议书模板
2014/04/23 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
商场收银员岗位职责
2015/04/07 职场文书
七个Python必备的GUI库
2021/04/27 Python
详解redis在微服务领域的贡献
2021/10/16 Redis