JS实现光滑展开合拢的菜单效果代码


Posted in Javascript onSeptember 16, 2015

本文实例讲述了JS实现光滑展开合拢的菜单效果代码。分享给大家供大家参考。具体如下:

这是一个光滑展开又合拢的JS菜单效果,无jQuery插件,完全JavaScript代码实现,没有过多修饰,有兴趣的美化一下,肯定是款不错的折叠菜单。

运行效果截图如下:

JS实现光滑展开合拢的菜单效果代码

在线演示地址如下:

具体代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="html/txt; charset=utf-8" />
<title>光滑展开合拢的JS菜单效果</title>
<style>
*{margin:0;padding:0;}
ul,li{list-style:none;}
#con{width:164px; margin:50px auto 0;}
#con h4.top{ height:4px; width:164px; overflow:hidden;}
#con h4.bottom{height:4px; width:164px;overflow:hidden;}
#con div{height:0px; overflow:hidden;}
#con h3{border-top:2px solid #fff; border-bottom:1px solid #D6EFFF;}
</style>
<script language="javascript">
var speed = 30;
var oCon = null; 
var oH3List = null;
var oDivList = null;
var oUlList = null;
var oldNum = null;
var clickNum = null;
var hideTimer=null;
var showTimer=null;
window.onload=function(){
 oCon = document.getElementById("con");
 oH3List = oCon.getElementsByTagName("h3");
 oUlList = oCon.getElementsByTagName("ul");
 oDivList = oCon.getElementsByTagName("div");
 for(var i=0;i<oUlList.length;i++){
  oH3List[i].xuhao=i;
  oH3List[i].onclick=function(){
   clickNum =this.xuhao;
   changeCatalog();
  };
 }
} 
function changeCatalog(){
 var old_num_2,click_num_2;
 old_num_2 = null;
 click_num_2= null;
 if(oldNum==null){
  click_Num_2=clickNum;
  showTimer = setInterval("showUl("+click_Num_2+")",speed);
 }else if(oldNum == clickNum){
  old_num_2=oldNum;
  hideTimer = setInterval("hideUl("+old_num_2+")",speed);
 }else{
  old_num_2=oldNum;
  click_num_2=clickNum;
  hideTimer = setInterval("hideUl("+old_num_2+")",speed);
  showTimer = setInterval("showUl("+click_num_2+")",speed);
 }
}
function showUl(num){
 var move_num1 =Math.ceil((oUlList[num].offsetHeight-oDivList[num].offsetHeight)/10);
 if(move_num1>=1){
  oDivList[num].style.height = oDivList[num].offsetHeight+move_num1+"px";
 }else{
  oldNum=num;
  clearInterval(showTimer);
 }
}
function hideUl(num){
 var move_num2=Math.ceil((oDivList[num].offsetHeight)/10);
 if(move_num2>0){
  oDivList[num].style.height=oDivList[num].offsetHeight -move_num2+"px";
 }else{
  clearInterval(hideTimer);
  if(clickNum==num){
   oldNum=null;
  }
 }
}
</script>
</head> 
<body>
<div id="con">
 <h4 class="top"></h4>
 <h1></h1>
 <h3>设计素材</h3>
 <div>
  <ul>
   <li>精品图标</li>
   <li>图片幻灯</li>
   <li>网页播放器</li>
  </ul>
 </div>
 <h3>模板素材</h3>
 <div>
  <ul>
   <li>企业网站</li>
   <li>儿童网站</li>
   <li>音乐网站</li>
   <li>Discuz模板</li>
  </ul>
 </div>
 <h3>脚本下载</h3>
 <div>
  <ul>
   <li>jQuery</li>
   <li>Ajax</li>
   <li>PHP</li>
  </ul>
 </div>
 <h3>网页特效</h3>
 <div>
  <ul>
   <li>菜单</li>
   <li>表单</li>
   <li>浏览器</li>
  </ul>
 </div>
 <h4 class="bottom"></h4>
</div> 
</body>
</html>

希望本文所述对大家的JavaScript程序设计有所帮助。

Javascript 相关文章推荐
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
Dec 16 Javascript
深入理解JavaScript系列(48):对象创建模式(下篇)
Mar 04 Javascript
jQuery插件datalist实现很好看的input下拉列表
Jul 14 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
Nov 16 Javascript
javaScript日期工具类DateUtils详解
Dec 08 Javascript
JS计算距当前时间的时间差实例
Dec 29 Javascript
jQuery第一次运行页面默认触发点击事件的实例
Jan 10 jQuery
vue-cli3.0 脚手架搭建项目的过程详解
Oct 19 Javascript
ElementUI Tag组件实现多标签生成的方法示例
Jul 08 Javascript
JS实现简易留言板特效
Dec 23 Javascript
Java Varargs 可变参数用法详解
Jan 28 Javascript
JSON stringify方法原理及实例解析
Oct 23 Javascript
jQuery实现两款有动画功能的导航菜单代码
Sep 16 #Javascript
javascript中的previousSibling和nextSibling的正确用法
Sep 16 #Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
Sep 16 #Javascript
JS+CSS实现的经典tab选项卡效果代码
Sep 16 #Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
Sep 16 #Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
Sep 16 #Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
Sep 16 #Javascript
You might like
PHP 高手之路(一)
2006/10/09 PHP
paypal即时到账php实现代码
2010/11/28 PHP
关于php连接mssql:pdo odbc sql server
2011/07/20 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
yii上传文件或图片实例
2014/04/01 PHP
php面向对象值单例模式
2016/05/03 PHP
12个非常有创意的JavaScript小游戏
2010/03/18 Javascript
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
2013/01/18 Javascript
js 利用image对象实现图片的预加载提高访问速度
2013/03/29 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
JavaScript中的splice()方法使用详解
2015/06/09 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
2016/05/15 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
2016/05/16 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
简单模拟node.js中require的加载机制
2016/10/27 Javascript
webpack4 处理SCSS的方法示例
2018/09/03 Javascript
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
详解node.js 事件循环
2020/07/22 Javascript
python输出带颜色字体实例方法
2019/09/01 Python
Python获取时间戳代码实例
2019/09/24 Python
Python 爬虫的原理
2020/07/30 Python
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/09/18 面试题
迟到检讨书400字
2014/01/13 职场文书
机械专业求职信
2014/05/25 职场文书
个人批评与自我批评发言稿
2014/09/28 职场文书
放弃继承权公证书
2015/01/23 职场文书
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android
基于Go语言构建RESTful API服务
2021/07/25 Golang
Redis入门教程详解
2021/08/30 Redis
Python torch.flatten()函数案例详解
2021/08/30 Python
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang