JavaScript教程:伸缩菜单的制作

前段时间项目里用到的,项目已经发布,今天整理一下发出来。

不用框架,纯JavaScript+CSS制作的二级伸缩菜单,简单易懂,具有很强的定制性和重复开发性。

程序说明:

页面调用方法:

以下为引用的内容:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>JavaScript可伸缩菜单 - Oncoding编码营原创</title>
<!--引入JS文件-->
<script type="text/javascript" src="jsmenu.js"></script>

.....
<!--加载程序-->
<body onload = "initMenu()">
<!--此处须定义ID-->
<div class="jsmenu" id="pm_menu">
<!--展开的一级分类-->
<div>
<span class="fath">业界资讯</span>
<p class="son">
<!--class="current"当前所在二级分类-->
<a class="current" href="http://p5s8.cnblogs.com/index.php#">业界新闻</a>
<a href="http://p5s8.cnblogs.com/index.php#">技术动态</a>
<a href="http://p5s8.cnblogs.com/index.php#">八卦评论</a>
</p>
</div>
<!--闭合的一级分类-->
<div class="collapsed">

....

</div>
<!--独立的一级分类-->
<div><span class="single"><a href="http://p5s8.cnblogs.com/index.php#">酷站</a></span></div>

....

程序说明:

以下为引用的内容:

//在ID为“js_menu”的div内开始程序
function initMenu(){
var pm_menu = new JSMenu("js_menu");
pm_menu.init();
}
//定义主函数
function JSMenu(id) {
if (!document.getElementById || !document.getElementsByTagName)
return false;
this.menu = document.getElementById(id);
this.submenus = this.menu.getElementsByTagName("div");
}
//引入函数,取得所有span
JSMenu.prototype.init = function() {
var mainInstance = this;
for (var i = 0; i < this.submenus.length; i++)
this.submenus[i].getElementsByTagName("span")[0].onclick = function() {
mainInstance.toggleMenu(this.parentNode);
};
this.expandOne();
};
//展开含"current"的菜单
JSMenu.prototype.expandOne = function() {
for (var i = 0; i < this.submenus.length; i++) {
var links = this.submenus[i].getElementsByTagName("a");
for (var j = 0; j < links.length; j++){
if (links[j].className == "current")
this.expandMenu(this.submenus[i]);
}
}
};
//变换菜单状态函数
JSMenu.prototype.toggleMenu = function(submenu) {
if (submenu.className == "collapsed")
this.expandMenu(submenu);
else
this.collapseMenu(submenu);
};
//展开所有菜单函数
JSMenu.prototype.expandMenu = function(submenu) {
var fullHeight = submenu.getElementsByTagName("span")[0].offsetHeight;
var links = submenu.getElementsByTagName("a");
for (var i = 0; i < links.length; i++)
fullHeight += links[i].offsetHeight;
var moveBy = Math.round(5 * links.length);

var mainInstance = this;
var intId = setInterval(function() {
var curHeight = submenu.offsetHeight;
var newHeight = curHeight + moveBy;
if (newHeight < fullHeight)
submenu.style.height = newHeight + "px";
else {
clearInterval(intId);
submenu.style.height = "";
submenu.className = "";
}
}, 30);
this.collapseOthers(submenu);
};
//折叠菜单函数
JSMenu.prototype.collapseMenu = function(submenu) {
var minHeight = submenu.getElementsByTagName("span")[0].offsetHeight;
var moveBy = Math.round(5 * submenu.getElementsByTagName("a").length);
var mainInstance = this;
var intId = setInterval(function() {
var curHeight = submenu.offsetHeight;
var newHeight = curHeight - moveBy;
if (newHeight > minHeight)
submenu.style.height = newHeight + "px";
else {
clearInterval(intId);
submenu.style.height = "";
submenu.className = "collapsed";
}
}, 30);
};
//折叠其他菜单函数
JSMenu.prototype.collapseOthers = function(submenu) {
for (var i = 0; i < this.submenus.length; i++)
if (this.submenus[i] != submenu && this.submenus[i].className != "collapsed")
this.collapseMenu(this.submenus[i]);
};

时间: 2024-08-30 17:57:05

JavaScript教程:伸缩菜单的制作的相关文章

JavaScript教程--从入门到精通(1)

javascript|教程 JavaScript是由Netscape公司开发并随Navigator导航者一起发布的.介于Java与HTML之间.基于对象事件驱动的编程语言,正日益受到全球的关注.因它的开发环境简单,不需要Java编译器,而是直接运行在Web浏览器中,而因倍受Web设计者的所爱. 这一套JavaScript教程分九个章节从什么是JavaScript.JavaScript的简单应用一直介绍到如何用JavaScript实现复杂的交互,对于JavaScript初学者和进阶者来说,都是一部

jQuery实现的经典竖向伸缩菜单效果代码_jquery

本文实例讲述了jQuery实现的经典竖向伸缩菜单效果代码.分享给大家供大家参考.具体如下: 这是一款使用jquery1.3.2制作的竖向伸缩菜单,每点击一次主菜单,会拉开出对应的二级菜单,再次点击会合拢,效果非常不错. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/jquery-jd-v-show-menu-demo-codes/ 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 T

滑动菜单的制作

菜单 今天应朋友们要求,来对我网站上一个滑动菜单效果写一篇简单的教程:在牛筋大学软件部有一个关于层滑动的效果,好像Itnow上的广告也是采用的这样效果,不用的时候隐藏,用的时候点击一下按钮层就慢慢的滑动出来,即节省了有限的页面空间,还达到了令人羡慕的视觉效果,感觉起来还不错.这个效果大家可以点击这里察看. 言归正传,废话少说.准备工作如下: 1. 在dw中新建一个空白文档(或者打开你要添加效果的页面). 2. 设置好你自己的css风格. 3. 在页面上插入一个长500pix的表格(这里说明:插入

滑动菜单的制作(组图)

菜单 今天应朋友们要求,来对我网站上一个滑动菜单效果写一篇简单的教程:在牛筋大学软件部有一个关于层滑动的效果,好像Itnow上的广告也是采用的这样效果,不用的时候隐藏,用的时候点击一下按钮层就慢慢的滑动出来,即节省了有限的页面空间,还达到了令人羡慕的视觉效果,感觉起来还不错.这个效果大家可以点击这里察看. 言归正传,废话少说.准备工作如下: 1. 在dw中新建一个空白文档(或者打开你要添加效果的页面). 2. 设置好你自己的css风格. 3.在页面上插入一个长500pix的表格(这里说明:插入表

JavaScript教程--从入门到精通(9)

javascript|教程 用JavaScript实现更复杂的交互 一.什么是框架 框架Frames最主要功用是"分割"视窗,使每个"小视窗"能显示不同的HTM L文件,不同框架之间可以互动(interact),这就是说不同框架之间可以交换讯息与资料.例如:假设您开了两个frames,第一个frame可显示书的目录,第二个frame则显示章节的具体内容. 框架可以将屏幕分割成不同的区域,每个区域有自己的URL,通过Frames[]数组对象来实现不同框架的访问.实际上

Dreamweaver滑动菜单的制作

言归正传,废话少说.准备工作如下: 1. 在dw中新建一个空白文档(或者打开你要添加效果的页面). 2. 设置好你自己的css风格. 3. 在页面上插入一个长500pix的表格(这里说明:插入表格的目的是为了控制层在不同分辨率下保持相对的位置不变,如果你的页面之前没有做相关设置,那么这一部你可能要费点功夫整理一下你的页面结构). 4. 将光标置入表格内,点击菜单 [插入--层] 插入一个长500高20的图层,并命名为layer1. 5. 然后再将光标置入图层layer1,点击菜单 [插入--层]

Flash教程实例:如何制作别样的绿

  设置影片属性;使用"文字工具"写入文字;使用帧动作设置动作;使用帧属性设置帧的属性;创建新元件.本文对Flash教程实例 :如何制作别样的绿进行了具体阐述供阅读. [步骤] (1) 启动Flash MX 2004,如果"属性"面板没有打开,可选择菜单栏中的"窗口"|"属性"命令打开它.在"属性"面板中,设置动画尺寸大小为600×300px.确认 "帧频"文本框中的数值为12.&quo

Excel中任意多级下拉菜单的制作方法

  Excel中任意多级下拉菜单的制作方法 是不是有点不敢相信,也许在想,即使能实现,肯定也会是非常非常的复杂.兰色告诉你,二级和二级以上的制作方法都是相同的原理,即使你EXCEL水平很菜,看完下面的教程,照样可以做出来. 一.1级下拉菜单 制作一级下拉菜单很简单,选取要设置的区域,数据 - 有效性 - 选取数据源. 二.2级下拉菜单 1 .在C和D列分别添加公式. C3公式:=MATCH(B3,A:A,0)-1 D3公式:=COUNTIF(A:A,B3) 2 .在下面A和B列设置二级的对应明细

JS实现横向拉伸动感伸缩菜单效果代码_javascript技巧

本文实例讲述了JS实现横向拉伸动感伸缩菜单效果代码.分享给大家供大家参考.具体如下: 这是一款JS实现的纵向拉伸变横向拉伸,动感伸缩菜单,紧身排列的CSS菜单,可用在博客等重要的位置部分作菜单,学习JavaScript前端设计的也可以作为参考范例. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-row-show-menu-style-codes/ 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD