javascript 可控速度的上下拉菜单
样式部分
<style type="text/css">
*{ margin:0; padding:0; border:none; background:none;}
ul,li{ list-style:none;}
.side-nav-list{ width:200px; background:#eee; border:#666 1px solid; padding:5px 10px; margin:20px auto;}
.side-nav-list li{ border-bottom:#666 1px solid;}
.side-nav-list-2,.side-nav-list-3{ display:none;}
.side-nav-list-2 li{ border-bottom:#999 1px dotted;}
.side-nav-list-3 li{ border-bottom:none;}
.side-nav-list .side-nav-list-2 a{ text-indent:1em;}
.side-nav-list .side-nav-list-3 a{ text-indent:2em;}
.side-nav-list a,.side-nav-list .slide-btn{color:#000; display:inline-block; height:24px; line-height:24px; overflow:hidden;}
.side-nav-list a{ text-decoration:none; width:80%; font-size:12px;}
.side-nav-list a:hover{ color:#C00;}
.side-nav-list .slide-btn{width:20%;text-align:center; cursor:pointer; font-weight:bold; font-size:16px;}
.side-nav-list .active-li{ background:#FFF; font-weight:bold;}
</style>
HTML部分
<ul class="side-nav-list" id="side-nav-list">
<li><a href="javascript:;">家居灯具</a><span class="slide-btn">+</span>
<ul class="side-nav-list-2">
<li><a href="slide.htm">客厅</a><span class="slide-btn">+</span>
<ul class="side-nav-list-3">
<li><a href="http://test.php?id=12">吸顶灯<span>(146)</span></a></li>
<li><a href="http://test.php?id=13">落地灯<span>(146)</span></a></li>
<li><a href="http://test.php?id=14">台灯<span>(146)</span></a></li>
<li><a href="http://test.php?id=15">壁灯<span>(146)</span></a></li>
<li><a href="http://test.php?id=16">筒灯<span>(146)</span></a></li>
<li><a href="http://test.php?id=17">天花灯<span>(146)</span></a></li>
</ul>
</li>
<li><a href="http://test.php?id=7">卧室</a><span class="slide-btn">+</span>
<ul class="side-nav-list-3">
<li><a href="http://test.php?id=23">吸顶灯<span>(146)</span></a></li>
<li><a href="http://test.php?id=24">落地灯<span>(146)</span></a></li>
<li><a href="http://test.php?id=25">台灯<span>(146)</span></a></li>
<li><a href="http://test.php?id=26">壁灯<span>(146)</span></a></li>
<li><a href="http://test.php?id=27">镜前灯<span>(146)</span></a></li>
<li><a href="http://test.php?id=28">天花灯<span>(146)</span></a></li>
</ul>
</li>
<li><a href="http://test.php?id=8">儿童房</a><span class="slide-btn">+</span>
<ul class="side-nav-list-3">
<li><a href="http://test.php?id=29">吸顶灯<span>(146)</span></a></li>
<li><a href="http://test.php?id=30">落地灯<span>(146)</span></a></li>
<li><a href="http://test.php?id=31">儿童护眼灯<span>(146)</span></a></li>
<li><a href="http://test.php?id=32">吊线灯<span>(146)</span></a></li>
</ul>
</li>
<li><a href="http://test.php?id=10">厨卫</a><span class="slide-btn">+</span>
<ul class="side-nav-list-3">
<li><a href="http://test.php?id=37">厨卫吸顶灯<span>(146)</span></a></li>
</ul>
</li>
<li><a href="http://test.php?id=11">阳台</a><span class="slide-btn">+</span>
<ul class="side-nav-list-3">
<li><a href="http://test.php?id=38">吸顶灯<span>(146)</span></a></li>
<li><a href="http://test.php?id=39">感应灯<span>(146)</span></a></li>
</ul>
</li> </ul>
</li>
<li><a href="javascript:;">光源电器</a><span class="slide-btn">+</span>
<ul class="side-nav-list-2">
<li><a href="http://test.php?id=42">3U灯</a><span class="slide-btn">+</span>
<ul class="side-nav-list-3">
</ul>
</li>
</ul>
</li>
</ul> <script type="text/javascript" src="slide.js"></script>
<script type="text/javascript">
var slideA = sideNavList.getElementsByTagName('a');
var lhref = location.href;
var ids = lhref.match(/id=\d+/);
if(ids){
for(var i=0; i < slideA.length; i++){
var tlink = slideA[i].href.match(/id=\d+/);
if(tlink && (tlink[0] === ids[0]) ){
var pn = slideA[i].parentNode.parentNode;
if(pn.tagName.toLowerCase()=='ul'){
show_nav_sel(pn);
}
slideA[i].parentNode.className = 'active-li';
}
}
} function show_nav_sel(o){
var p_t = o.parentNode.parentNode;
if(p_t.tagName.toLowerCase()=='ul'){
arguments.callee(p_t);
}
var pen = getPrevEleNode(o);
if(pen!=null && pen.tagName.toLowerCase()=='span' && pen.className=='slide-btn'){
pen.click();
}
} </script>
Slide.js部分
// JavaScript Document
var sideNavList = document.getElementById('side-nav-list'),
sideSpanBtn = sideNavList.getElementsByTagName('span'),
spanLength = sideSpanBtn.length,
i = 0;
for(; i < spanLength ; i++){
if(sideSpanBtn[i].className == 'slide-btn'){
var next_ul = getNextEleNode(sideSpanBtn[i]);
var ul_in_li_length = next_ul && next_ul.tagName.toLowerCase()=='ul' ? next_ul.getElementsByTagName('li').length : 0;
if(ul_in_li_length){
sideSpanBtn[i].onclick = function(){ul_slide(this,'ul');}
}else{
sideSpanBtn[i].style.display = 'none';
}
}
}
function ul_slide(o,s_tag){
o.innerHTML = o.innerHTML=='+'?'-':'+';
var n_s = getNextEleNode(o);
if(!n_s){return false;}
if(n_s.tagName.toLowerCase()==s_tag){
var n_s_display = n_s.style.display;
if(n_s_display =='none' || !n_s_display || (n_s_display=='block' && !n_s.offsetHeight)){
slideDown(n_s,500);
}else{
slideUp(n_s,500);
}
}
}
function getNextEleNode(n){
var x=n.nextSibling;
while ( x!=null && x.nodeType!=1){
x=x.nextSibling;
}
return x;
}
function getPrevEleNode(n){
var x=n.previousSibling;
while ( x!=null && x.nodeType!=1){
x=x.previousSibling;
}
return x;
}
function slideDown(o,t){
o.style.display = 'block';
o.style.overflow = 'hidden';
var h = o.scrollHeight;
if(h>0){
var m = h / t * 10;
set_slide_down(o,h,m,t,1);
}
}
function slideUp(o,t){
var h = o.scrollHeight;
if(h>0){
var m = h / t * 10;
set_slide_up(o,h,m,t,1);
}
}
function set_slide_down(o,h,m,t,n){
if( m * n < h ){
o.style.height = (m*n)+'px';
setTimeout(function(){set_slide_down(o,h,m,t,n+1)},1);
}else{
o.style.height = "auto";
}
}
function set_slide_up(o,h,m,t,n){
if( ( h-( m * n ) ) > 0 ){
o.style.height = h-(m*n)+'px';
setTimeout(function(){set_slide_up(o,h,m,t,n+1)},1);
}else{
o.style.height = '0px';
}
}
javascript 可控速度的上下拉菜单的更多相关文章
- JavaScript 多级联动浮动(下拉)菜单 (第二版)
JavaScript 多级联动浮动(下拉)菜单 (第二版) 上一个版本(第一版请看这里)基本实现了多级联动和浮动菜单的功能,但效果不是太好,使用麻烦还有些bug,实用性不高.这次除了修改已发现的问 ...
- 第一百三十二节,JavaScript,封装库--下拉菜单
JavaScript,封装库--下拉菜单 封装库,增加了3个方法 shu_biao_yi_ru_yi_chu()方法,给元素设置鼠标移入移出事件,接收两个参数,参数是移入和移出时的执行函数(包含代码) ...
- JavaScript+CSS+DIV实现下拉菜单示例
<!DOCTYPE html> <html> <head> <title>下拉菜单示例</title> <script languag ...
- (JavaScript插件——下拉菜单)
前言 阅读之前您也可以到Bootstrap3.0入门学习系列导航中进行查看http://www.cnblogs.com/aehyok/p/3404867.html 本文主要来学习一下JavaScrip ...
- Bootstrap学习js插件篇之下拉菜单
案例 通过此插件可以为几乎所有东西添加下拉菜单,包括导航条.标签页.胶囊式按钮. 用于导航条 导航条分为四个部分.第一部分导航头,第二部分导航列,第三部分form查询表单,第四部分导航列. <n ...
- 二、JavaScript语言--事件处理--DOM事件探秘--下拉菜单
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Javascript版选择下拉菜单互移且排序
效果图如下: 代码如下: <html> <head> <title>Javascript版选择下拉菜单互移且排序</title> <meta ht ...
- javascript 横向下拉菜单演示
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN"><head><me ...
- 下拉菜单--JavaScript触发方法
1. $(function(){ $(".dropdown-toggle").one("click",function(){ $(this).dropdown( ...
随机推荐
- C语言笔记(二维数组与数值指针)
一.关于二维数组和二维数组区别 (1)一维数组在内存中是连续分布存储的,同样,二维数组也是在内存连续存储的.所以从内存的角度来分析,一维数组和二维数组其实没有本质区别. (2) 二维数组可以使用一维数 ...
- 2016022609 - redis哈希命令集合
参考:http://www.yiibai.com/redis/redis_hashes.html Redis的哈希值是字符串字段和字符串值之间的映射,所以他们是表示对象的完美数据类型 在Redis中的 ...
- 【微机】验证负数以补码存储程序 C语言
微机中验证负数以补码存储程序 一.相关基础知识 负数的补码等于它的反码加1,即在其反码的最低位加1就为该数的补码,且在计算机中负数以补码形式进行存储. .int型占4字节(32位二进制)char型占1 ...
- 机务UI设计小节
1.CSS样式 .header { background-color:#7A8692; color:White; height:30px; font-size:16px; width:100%; li ...
- bzoj 2049: [Sdoi2008]Cave 洞穴勘测 动态树
2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 3119 Solved: 1399[Submit] ...
- Java简单购物车设计
还是存在一些问题(比如clear函数没效果.乱码,单独测试也没,确实找不到问题),路过的给解决下... 第一部分 会话控制 会话跟踪: 使用隐藏表单字段 URL重写,实际就是直 ...
- 【HTTP】Speed and Mobility: An Approach for HTTP 2.0 to Make Mobile Apps and the Web Faster
This week begins face to face meetings at the IETF on how to approach HTTP 2.0 and improve the Inter ...
- 深入了解一下PYTHON中关于SOCKETSERVER的模块-A
有了这块知识,应该对各类WEB框架有更好的理解吧..FLASK,DJANGO,WEBPY.... #!/usr/bin/env python from BaseHTTPServer import HT ...
- 【UVA1416】(LA4080) Warfare And Logistics (单源最短路)
题目: Sample Input4 6 10001 3 21 4 42 1 32 3 33 4 14 2 2Sample Output28 38 题意: 给出n个节点m条无向边的图,每条边权都为正.令 ...
- AStyle代码格式工具在source insight中的使用
一.AStyle下载路径 Astyle为开源项目,支持C/C++和java的代码格式化 Home Page: http://astyle.sourceforge.net/ Project Page: ...