原生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 相关文章推荐
Js 本页面传值实现代码
May 17 Javascript
js 禁止选择功能实现代码(兼容IE/Firefox)
Apr 23 Javascript
js对象的构造和继承实现代码
Dec 05 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
Aug 14 Javascript
详解jquery事件delegate()的使用方法
Jan 25 Javascript
老生常谈JS中的继承及实现代码
Jul 06 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
Jul 09 Javascript
JS插件clipboard.js实现一键复制粘贴功能
Dec 04 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
Oct 30 Javascript
解决layer.msg 不居中 ifram中的问题
Sep 05 Javascript
js实现左右轮播图
Jan 09 Javascript
React+EggJs实现断点续传的示例代码
Jul 07 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下使用以下代码连接并测试
2008/04/09 PHP
php 删除无限级目录与文件代码共享
2008/11/22 PHP
PHP 作用域解析运算符(::)
2010/07/27 PHP
PHP内核探索:变量存储与类型使用说明
2014/01/30 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
2019/04/02 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
javascript数组组合成字符串的脚本
2021/01/06 Javascript
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
2014/01/31 Javascript
js控制分页打印、打印分页示例
2014/02/08 Javascript
轻松创建nodejs服务器(2):nodejs服务器的构成分析
2014/12/18 NodeJs
JQuery中extend的用法实例分析
2015/02/08 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
jquery插件之文字间歇自动向上滚动效果代码
2016/02/25 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
2017/07/18 jQuery
webpack处理 css\less\sass 样式的方法
2017/08/21 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
layui对工具条进行选择性的显示方法
2019/09/19 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
vue组件添加事件@click.native操作
2020/10/30 Javascript
[02:31]《DAC最前线》之选手酒店现场花絮
2015/01/30 DOTA
python基础教程项目五之虚拟茶话会
2018/04/02 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
架构师岗位职责
2013/11/18 职场文书
小学生环保倡议书
2014/05/15 职场文书
纪检干部个人对照检查材料
2014/09/23 职场文书
刘公岛导游词
2015/02/05 职场文书
爱的教育观后感
2015/06/17 职场文书
vue+springboot实现登录验证码
2021/05/27 Vue.js