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( ...
随机推荐
- hadoop 2.0--YARN
从2012年8月开始Apache Hadoop YARN(YARN = Yet Another Resource Negotiator)成了Apache Hadoop的一项子工程.自此Apache H ...
- WPF布局容器综合展示
Border控件,以及几个重要要的属性:Background:背景的 Brush 对象BorderBrush:用来绘制边框BorderThickness: Border 边框的宽度,设置边框每一边的线 ...
- Word神器使用
调整自动换行符的换行起始点: 拖拽下面的三角部分(三角下面的四边形部分不要碰),就可以调整自动编号的换行后的其实点在哪里.
- 添加三维动画 demo
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...
- mvc Model元数据【学习笔记】
页面中Html.Editorfor(model=>model.fieldname)这些方法,都是通过Model的元数据来生成html的,我们如果想控制最终生成的html,可以通过修改元数据来实现 ...
- LightOj_1284 Lights inside 3D Grid
题目链接 题意: 给一个X * Y * Z 的立方体, 每个单位立方体内都有一盏灯, 初始状态是灭的, 你每次操作如下: 1)选择一个点(x1, y1, z1) 再选择一个点(x2, y2, ...
- Uva_11762 Race to 1
题目链接 题意: 给一个数n, 每次从小于等于n的素数里选一个P, 如果能被n整除, 那么就n就变成n / P. 问: n 变成1的期望. 思路: 设小于等于n的素数有p 个, 其中是n的约数的有g个 ...
- CTSC2015&APIO2015滚粗记
CTSC 这次CTSC的考试,觉得还是考出了自己该有的水平.虽然自己最后还是没有得到金牌,但是我觉得自己尽力了,也没有什么太大的遗憾.比起省选,自己在应试的方面又有了很大的进步. Day1是我主要捞分 ...
- unity Character Controller 点滴
unity Character Controller 点滴 1.今天在做角色的时候,发现人物跳不起来,原来设置这个属性即可,Step Offset, 这个是台阶的高度,这个值设置的越大,人物爬的越高 ...
- 有感,懂市场比懂产品重要,懂产品比懂技术重要——想起凡客诚品和YY语音了
一个创业公司,最好三样都要有,但应该CEO是懂市场,经理懂产品,程序员最好懂技术厉害一点-这还不算,销售也要厉害一点,不能守株待兔- 美工——有钱最好请个美工,最起码也要请人设计修改一下- 财务——不 ...