纯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 小练习(实例代码)
Aug 07 Javascript
js判断设备是否为PC并调整图片大小
Feb 12 Javascript
jQuery判断数组是否包含了指定的元素
Mar 10 Javascript
Jquery Ajax Error 调试错误的技巧
Nov 20 Javascript
JS设置cookie、读取cookie
Feb 24 Javascript
工厂模式在JS中的实践
Jan 18 Javascript
老生常谈js-react组件生命周期
May 02 Javascript
信息滚动效果的实例讲解
Sep 18 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
Dec 17 Javascript
Jquery Datatables的使用详解
Jan 30 jQuery
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
Jul 21 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
Sep 04 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高自定义性安全验证码代码
2011/11/27 PHP
php实现简易聊天室应用代码
2015/09/23 PHP
PHP文件上传操作实例详解
2016/09/27 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
JavaScript接口实现代码 (Interfaces In JavaScript)
2010/06/11 Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
2013/12/05 Javascript
JavaScript声明变量时为什么要加var关键字
2014/09/29 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
javascript 对象数组根据对象object key的值排序
2015/03/09 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
2015/08/07 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
vue指令以及dom操作详解
2017/03/04 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
vue2.0实现移动端的输入框实时检索更新列表功能
2018/05/08 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
2018/09/14 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
python的依赖管理的实现
2019/05/14 Python
Python中输入和输出(打印)数据实例方法
2019/10/13 Python
python读取ini配置的类封装代码实例
2020/01/08 Python
HTML5中indexedDB 数据库的使用实例
2017/05/11 HTML / CSS
REISS英国官网:伦敦High Street最受欢迎品牌
2016/12/21 全球购物
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
老师推荐信
2013/10/28 职场文书
家长对孩子评语
2014/01/30 职场文书
九一八事变演讲稿范文
2014/09/14 职场文书
三好学生事迹材料
2014/12/24 职场文书
教导主任个人总结
2015/03/03 职场文书
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL
如何利用React实现图片识别App
2022/02/18 Javascript
「天才王子的赤字国家重生术」妮妮姆·拉雷粘土人开订
2022/03/21 日漫
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏