原生JS实现垂直手风琴效果


Posted in Javascript onFebruary 19, 2017

效果如下:

原生JS实现垂直手风琴效果

图 (1) 展开前

原生JS实现垂直手风琴效果

图 (2) 展开后

代码如下:

<!DOCTYPE html>
<html lang="en">
 <head>
 <meta charset="utf-8">
 <style>
  *{ margin: 0; padding: 0; }
  .panel {
 width: 555px;
 height: auto;
 background-color: #333333;
 margin: 50px auto;
  }
  .panel-title {
  width: 100%;
  height: 68px;
  text-align: center;
  font: 600 18px/68px '微软雅黑';
  color: #fff;
  cursor: pointer;
  }
  .collapse {
  width: 100%;
  height: 0;
  background-color: #167EA0;
  overflow: hidden;
  }
  .collapse p {
  color: #fff;
  font: 500 16px '微软雅黑'; 
  text-indent: 2em; 
  padding: 20px 20px 0 20px;
  }
  #One,#Tow,#Three{
  border-top: solid 1px #ccc;
  }
 </style>
 </head>
 <body>
 <div class="panel" id="panel">
 <h4 class="panel-title" id="panel-title">1 《抉择》</h4>
 <div class="collapse" id = "One"><p></p></div>
 <h4 class="panel-title" id="panel-title">2 《生命》</h4>
 <div class = "collapse" id="Tow"><p></p></div>
 <h4 class="panel-title" id="panel-title">3 《大小》</h4>
 <div class = "collapse" id="Three"><p></p></div>
 <h4 class="panel-title" id="panel-title">4 《崇拜》</h4>
 <div class = "collapse" id="Four"><p></p></div>
 </div>
 </body>
 <script>
 function animate(obj,json,endFn){
 //关闭上一个定时器
 clearInterval(obj.timer); 
 //管理定时器
 obj.timer = setInterval(function(){
 //定时器开关 ,用来判断是否定时定时器
 var flag = true;
 //遍历json 
 for(var arrt in json){
 //计算步长 步长 = 目标位置 - 当前位置
 var step = (json[arrt] - parseInt(getStyle(obj,arrt))) / 5;
 //步长取整
 step = step > 0 ? Math.ceil(step): Math.floor(step);
 //盒子移动: 盒子现在的位置 + 步长取整
 obj.style[arrt] = parseInt(getStyle(obj,arrt)) + step + 'px';

 //只要其中一个不满足条件,就不停止定时器
 if(parseInt(getStyle(obj,arrt)) != json[arrt]){
 flag = false;
 }  
 }
 //关闭定时器
 if(flag){
 clearInterval(obj.timer);
 //2秒后执行回调函数
 setTimeout(function(){
 //判断是否有回调函数,有endFn 再执行回调函数
 endFn&&endFn();
 },1000) 
 }
 },20);
 } 
 //获得现在的样式
 function getStyle(obj,arrt){
 //兼容ie
 return obj.currentStyle? obj.currentStyle[arrt] : getComputedStyle(obj,null)[arrt];
 }
 var panel = document.getElementById("panel");
 var oH = panel.getElementsByTagName('h4');
 var oDiv = panel.getElementsByTagName('div'); 
 var str = ["人的一生常处于抉择之中,如:念哪一间大学?选哪一种职业?娶哪一种女子?……等等伤脑筋的事情。一个人抉择力的有无,可以显示其人格成熟与否。倒是哪些胸无主见的人,不受抉择之苦。因为逢到需要决定的时候,他总是求询别人说:'嘿,你看怎么做?'大凡能够成大功业的人,都是抉择力甚强的人。他知道事之成败,全在乎已没有人可以代劳,更没有人能代你决定。在抉择的哪一刻,成败实已露出端倪。","生命,也许是宇宙之间唯一应该受到崇拜的因素。生命的孕育、诞生和显示本质是一种无比激动人心的过程。生命像音乐和画面一样暗自挟带着一种命定的声调或血色,当它遇到大潮的袭卷,当它听到号角的催促时,它会顿时抖擞,露出本质的绚烂和激昂。当然,这本质更可能是卑污、懦弱、乏味的;它的主人并无选择的可能。应当承认,生命就是希望。应当说,卑鄙和庸俗不该得意过早,不该误认为它们已经成功地消灭了高尚和真纯。伪装也同样不能持久,因为时间像一条长河在滔滔冲刷,卑鄙者、奸商和俗棍不可能永远戴着教育家、诗人和战士的桂冠。在他们畅行无阻的生涯尽头,他们的后人将长久地感到羞辱。","一位朋友谈到他亲戚的姑婆,一生从来没有穿过合脚的鞋子,常穿着巨大的鞋子走来走去。儿子晚辈如果问她,她就会说:'大小鞋都是一样的价钱,为什么不买大的?'每次我转述这个故事,总有一些人笑得岔了气。其实,在生活里我们会看到很多这样的'姑婆'。没有什么思想的作家,偏偏写着厚重苦涩的作品;没有什么内容的画家,偏偏画着超级巨画;经常不在家的商人,却有非常巨大的家园。许多人不断地追求巨大,其实只是被内在贪欲推动着,就好像买了特大号的鞋子,忘了自己的脚一样。不管买什么鞋子,合脚最重要,不论追求什么,总要适可而止。","我崇拜高尚的生命的秘密。我崇拜这生命在降生、成长、战斗、伤残、牺牲时迸溅出的钢花焰火。我崇拜一个活灵灵的生命在崇山大河,在海洋和大陆上飘荡的自由。是的,生命就是希望。它飘荡无定,自由自在,它使人类中总有一支血脉不甘于失败,九死不悔地追寻着自己的金牧场。"];
 for(var i = 0;i<oH.length;i++){
 oH[i].index = i;
 oH[i].onclick = function(){
 for(var j = 0;j<oH.length; j++){
 animate(oDiv[j],{height:0});
 }
 if(parseInt(getStyle(oDiv[this.index],'height')) == 0){
 animate(oDiv[this.index],{height:210}); 
 oDiv[this.index].children[0].innerHTML = str[this.index]; 
 }else{
 animate(oDiv[this.index],{height:0});
 }
 }
 } 
 </script>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
用方法封装javascript的new操作符(一)
Dec 25 Javascript
js获取html文件的思路及示例
Sep 17 Javascript
jquery 实现两Select 标签项互调示例代码
Sep 25 Javascript
鼠标悬浮显示二级菜单效果的jquery实现
Oct 29 Javascript
node.js中的fs.fsync方法使用说明
Dec 15 Javascript
JavaScript中的数组操作介绍
Dec 30 Javascript
JS实现左右拖动改变内容显示区域大小的方法
Oct 13 Javascript
JavaScript中清空数组的方法总结
Dec 02 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
Mar 28 Javascript
详解Axios 如何取消已发送的请求
Oct 20 Javascript
微信小程序云开发 搭建一个管理小程序
May 17 Javascript
前端路由&amp;webpack基础配置详解
Jun 10 Javascript
js鼠标移动时禁止选中文字
Feb 19 #Javascript
canvas雪花效果核心代码分享
Feb 19 #Javascript
Ajax和Comet技术总结
Feb 19 #Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
Feb 19 #Javascript
Angularjs中的ui-bootstrap的使用教程
Feb 19 #Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
Feb 19 #Javascript
RequireJs的使用详解
Feb 19 #Javascript
You might like
一个php作的文本留言本的例子(五)
2006/10/09 PHP
用PHP制作静态网站的模板框架(三)
2006/10/09 PHP
用ODBC的分页显示
2006/10/09 PHP
简单的页面缓冲技术
2006/10/09 PHP
php 获取远程网页内容的函数
2009/09/08 PHP
php 短链接算法收集与分析
2011/12/30 PHP
thinkphp实现上一篇与下一篇的方法
2014/12/08 PHP
php使用GD创建保持宽高比缩略图的方法
2015/04/17 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
Laravel 5.3 学习笔记之 配置
2016/08/28 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
PHP使用PDO访问oracle数据库的步骤详解
2017/09/29 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
使用js在页面中绘制表格核心代码
2013/09/16 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
2014/09/21 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
JS实现的自定义网页拖动类
2015/11/06 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
JavaScript中的return语句简单介绍
2015/12/07 Javascript
jQuery zTree加载树形菜单功能
2016/02/25 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
提升页面加载速度的插件InstantClick
2017/09/12 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
如何用itertools解决无序排列组合的问题
2017/05/18 Python
Selenium控制浏览器常见操作示例
2018/08/13 Python
接口中的方法可以是abstract的吗
2015/07/23 面试题
上海雨人软件技术开发有限公司测试题
2015/07/14 面试题
日语专业毕业生自荐信
2013/11/11 职场文书
数学国培研修感言
2014/02/13 职场文书
关于奉献的演讲稿
2014/05/21 职场文书
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
毕业生入职感言
2015/07/31 职场文书
文明礼貌主题班会
2015/08/14 职场文书
Python实现视频中添加音频工具详解
2021/12/06 Python