纯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 相关文章推荐
JavaScript 学习笔记(十五)
Jan 28 Javascript
浏览器解析js生成的html出现样式问题的解决方法
Apr 16 Javascript
javascript上传图片前预览图片兼容大多数浏览器
Oct 25 Javascript
JS 在指定数组中随机取出N个不重复的数据
Jun 10 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
Jun 11 Javascript
JS获取鼠标选中的文字
Aug 10 Javascript
BootstrapValidator超详细教程(推荐)
Dec 07 Javascript
swiper动态改变滑动内容的实现方法
Jan 17 Javascript
用js简单提供增删改查接口
May 12 Javascript
微信小程序如何利用getCurrentPages进行页面传值
Jul 01 Javascript
详解JavaScript 的执行机制
Sep 18 Javascript
详解如何解决使用JSON.stringify时遇到的循环引用问题
Mar 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
php curl 上传文件代码实例
2015/04/27 PHP
yii使用activeFileField控件实现上传文件与图片的方法
2015/12/28 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
PHP的反射机制实例详解
2017/03/29 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
PHP fopen中文文件名乱码问题解决方案
2020/10/28 PHP
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
JS实现带提示的星级评分效果完整实例
2015/10/30 Javascript
JavaScript实现复制内容到粘贴板代码
2016/03/31 Javascript
js实现纯前端的图片预览
2016/04/27 Javascript
基于WebUploader的文件上传js插件
2016/08/19 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
Angular 4 指令快速入门教程
2017/06/07 Javascript
使用mint-ui实现省市区三级联动效果的示例代码
2018/02/09 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
2018/04/26 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
2018/05/16 Javascript
微信小程序实现人脸识别
2018/05/25 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
[45:16]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第一场 12.12
2020/12/16 DOTA
Python实现检测服务器是否可以ping通的2种方法
2015/01/01 Python
全面解析Python的While循环语句的使用方法
2015/10/13 Python
jenkins配置python脚本定时任务过程图解
2019/10/29 Python
pytorch 实现打印模型的参数值
2019/12/30 Python
草莓网化妆品加拿大网站:Strawberrynet Canada
2016/09/20 全球购物
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
2013/07/06 面试题
小学门卫岗位职责
2013/12/17 职场文书
仓库理货员岗位职责
2013/12/18 职场文书
致长跑运动员广播稿
2014/01/31 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
2014年创卫工作总结
2014/11/24 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
入党积极分子考察意见
2015/06/02 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
Redis命令处理过程源码解析
2022/02/12 Redis