织梦(dedecms)导航条dropdown.js的改进(附演示demo)
<p><span style='font-family: tahoma, arial, "Microsoft YaHei"; font-size: 14px;'>可以设置一个一直都显示的二级菜单,修复了没有二级菜单时鼠标移上去仍然显示上一个二级菜单的问题.支持一级菜单鼠标离开事件 </span><br style='font-family: tahoma, arial, "Microsoft YaHei"; font-size: 14px;'><span style='font-family: tahoma, arial, "Microsoft YaHei"; font-size: 14px;'>html代码 </span></p>
<div class="msgheader" style='margin: 3px auto 0px; padding: 0px 3px; outline: none; line-height: 21.6px; clear: both; border-width: 1px; border-style: solid; border-color: rgb(0, 153, 204); background: rgb(246, 251, 255); overflow: hidden; font-family: tahoma, arial, "Microsoft YaHei";'>
<p class="right">
<span><u>复制代码</u></span></p>
<p>
代码如下:</p>
</div>
<p class="msgborder" style='margin: 0px auto 3px; padding: 0px 3px; outline: none; line-height: 25.2px; font-size: 14px; clear: both; border-right: 1px solid rgb(0, 153, 204); background: rgb(221, 237, 251); overflow: hidden; border-left: 1px solid rgb(0, 153, 204); word-break: break-all; border-bottom: 1px solid rgb(0, 153, 204); word-wrap: break-word; font-family: tahoma, arial, "Microsoft YaHei";'>
<br>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <br>
<html xmlns="http://www.w3.org/1999/xhtml"> <br>
<head> <br>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <br>
<title>我的网站</title> <br>
<meta name="description" content="" /> <br>
<meta name="keywords" content="" /> <br>
<link type="text/css" rel="stylesheet" href="http://www.188163.com/img/fnews/css/style.css" /> <br>
</head> <br>
<body> <br>
<div class="w1000"> <br>
<div class="w960"> <br>
<!--f1--> <br>
<!-- 菜单 --> <br>
<div id="menu" class="menus"> <br>
<ul> <br>
<!-- class='navselect'根据此属性来判断需要默认显示的二级菜单,以便在织梦模板中通用 --> <br>
<li class='navselect'><a href="/" rel='dropmenu1'>主 页</a></li> <br>
<li><a href='/a/jinrongzixun/'>金融资讯</a></li> <br>
<li><a href='/a/gerenjinrong/' rel='dropmenu2'>个人金融</a></li> <br>
<li><a href='/a/qiyejinrong/' rel='dropmenu4'>企业金融</a></li> <br>
<li><a href='/a/caijingpindao/' rel='dropmenu5'>财经频道</a></li> <br>
<li><a href='/a/zhifujiesuan/' rel='dropmenu6'>支付结算</a></li> <br>
<li><a href='/a/yewushenqingtongdao/' rel='dropmenu7'>业务申请</a></li> <br>
<li><a href='/a/zhongyaogonggao/' >重要公告</a></li> <br>
<li><a href='/a/xinyongka/' >信用卡</a></li> <br>
</ul> <br>
</div> <br>
<div class="menus_bottom"> <br>
</div> <br>
<!-- //二级子类下拉菜单 --> <br>
<br>
<ul id="dropmenu1" class="dropMenu"> <br>
<li><a href="/a/gerenjinrong/touzilicai/">首页列表</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
</ul> <br>
<ul id="dropmenu2" class="dropMenu"> <br>
<li><a href="/a/gerenjinrong/touzilicai/">投资理财</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
<li><a href="/a/gerenjinrong/grdk/">个人贷款</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
<li><a href="/a/gerenjinrong/gerenxiaofei/">个人消费贷款</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
<li><a href="/a/gerenjinrong/xinyong/">信用贷款</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
<li><a href="/a/gerenjinrong/qichedaikuan/">汽车贷款</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
<li><a href="/a/gerenjinrong/yishoulou/">一手楼按揭</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
<li><a href="/a/gerenjinrong/ershoulou/">二手楼按揭</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
<li><a href="/a/gerenjinrong/grjy/">个人经营贷款</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
</ul> <br>
<ul id="dropmenu4" class="dropMenu"> <br>
<li><a href="/a/qiyejinrong/gongsirongzi/">公司融资</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
<li><a href="/a/qiyejinrong/maoyirongzi/">贸易融资</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
<li><a href="/a/qiyejinrong/gongsilicai/">公司理财</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
<li><a href="/a/qiyejinrong/piaojuyewu/">票据业务</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
<li><a href="/a/qiyejinrong/xiangmurongzi/">项目融资</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
</ul> <br>
<ul id="dropmenu5" class="dropMenu"> <br>
<li><a href="/a/caijingpindao/huangjin/">黄金</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
<li><a href="/a/caijingpindao/zhaiquan/">债券</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
<li><a href="/a/caijingpindao/waihui/">外汇</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
<li><a href="/a/caijingpindao/jijin/">基金</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
</ul> <br>
<ul id="dropmenu6" class="dropMenu"> <br>
<li><a href="/a/zhifujiesuan/pos/">P0S支付</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
</ul> <br>
<ul id="dropmenu7" class="dropMenu"> <br>
<li><a href="/a/yewushenqingtongdao/gerenyewu/">个人业务咨询</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
<li><a href="/a/yewushenqingtongdao/gongsiyewu/">公司业务咨询</a>&nbsp;&nbsp;|&nbsp;&nbsp;</li> <br>
</ul> <br>
<ul id="dropmenu8" class="dropMenu"> <br>
</ul> <br>
<ul id="dropmenu3" class="dropMenu"> <br>
</ul> <br>
<br>
</div> <br>
</div> <br>
<!--1000 end --> <br>
</body> <br>
</html> </p>
<p>
<br style='font-family: tahoma, arial, "Microsoft YaHei"; font-size: 14px;'><span style='font-family: tahoma, arial, "Microsoft YaHei"; font-size: 14px;'>dropdown.js </span></p>
<div class="msgheader" style='margin: 3px auto 0px; padding: 0px 3px; outline: none; line-height: 21.6px; clear: both; border-width: 1px; border-style: solid; border-color: rgb(0, 153, 204); background: rgb(246, 251, 255); overflow: hidden; font-family: tahoma, arial, "Microsoft YaHei";'>
<p class="right">
<span><u>复制代码</u></span></p>
<p>
代码如下:</p>
</div>
<p class="msgborder" style='margin: 0px auto 3px; padding: 0px 3px; outline: none; line-height: 25.2px; font-size: 14px; clear: both; border-right: 1px solid rgb(0, 153, 204); background: rgb(221, 237, 251); overflow: hidden; border-left: 1px solid rgb(0, 153, 204); word-break: break-all; border-bottom: 1px solid rgb(0, 153, 204); word-wrap: break-word; font-family: tahoma, arial, "Microsoft YaHei";'>
<br>
var cssdropdown = { <br>
disappeardelay: 250, <br>
disablemenuclick: false, <br>
enableswipe: 1, <br>
enableiframeshim: 1, <br>
dropmenuobj: null, <br>
ie: document.all, <br>
firefox: document.getElementById && !document.all, <br>
swipetimer: undefined, <br>
bottomclip: 0, <br>
getposOffset: function(what, offsettype) { <br>
var totaloffset = (offsettype == "left") ? what.offsetLeft: what.offsetTop; <br>
var parentEl = what.offsetParent; <br>
while (parentEl != null) { <br>
totaloffset = (offsettype == "left") ? totaloffset + parentEl.offsetLeft: totaloffset + parentEl.offsetTop; <br>
parentEl = parentEl.offsetParent; <br>
} <br>
return totaloffset; <br>
}, <br>
swipeeffect: function() { <br>
if (this.bottomclip < parseInt(this.dropmenuobj.offsetHeight)) { <br>
this.bottomclip += 10 + (this.bottomclip / 10); <br>
this.dropmenuobj.style.clip = "rect(0 auto " + this.bottomclip + "px 0)"; <br>
} else return; <br>
this.swipetimer = setTimeout("cssdropdown.swipeeffect()", 10); <br>
}, <br>
//隐藏或者显示二级菜单 <br>
showhide: function(obj, e) { <br>
if (this.ie || this.firefox) this.dropmenuobj.style.left = this.dropmenuobj.style.top = "-500px"; <br>
if (e.type == "click" && obj.visibility == hidden || e.type == "mouseover") { <br>
if (this.enableswipe == 1) { <br>
if (typeof this.swipetimer != "undefined") clearTimeout(this.swipetimer); <br>
obj.clip = "rect(0 auto 0 0)"; <br>
this.bottomclip = 0; <br>
this.swipeeffect(); <br>
} <br>
obj.visibility = "visible"; <br>
} else if (e.type == "click") obj.visibility = "hidden"; <br>
}, <br>
iecompattest: function() { <br>
return (document.compatMode && document.compatMode != "BackCompat") ? document.documentElement: document.body; <br>
}, <br>
clearbrowseredge: function(obj, whichedge) { <br>
var edgeoffset = 0; <br>
if (whichedge == "rightedge") { <br>
var windowedge = this.ie && !window.opera ? this.iecompattest().scrollLeft + this.iecompattest().clientWidth - 15 : window.pageXOffset + window.innerWidth - 15; <br>
this.dropmenuobj.contentmeasure = this.dropmenuobj.offsetWidth; <br>
if (windowedge - this.dropmenuobj.x < this.dropmenuobj.contentmeasure) edgeoffset = this.dropmenuobj.contentmeasure - obj.offsetWidth; <br>
} else { <br>
var topedge = this.ie && !window.opera ? this.iecompattest().scrollTop: window.pageYOffset; <br>
var windowedge = this.ie && !window.opera ? this.iecompattest().scrollTop + this.iecompattest().clientHeight - 15 : window.pageYOffset + window.innerHeight - 18; <br>
this.dropmenuobj.contentmeasure = this.dropmenuobj.offsetHeight; <br>
if (windowedge - this.dropmenuobj.y < this.dropmenuobj.contentmeasure) { <br>
edgeoffset = this.dropmenuobj.contentmeasure + obj.offsetHeight; <br>
if ((this.dropmenuobj.y - topedge) < this.dropmenuobj.contentmeasure) edgeoffset = this.dropmenuobj.y + obj.offsetHeight - topedge; <br>
} <br>
} <br>
return edgeoffset; <br>
}, <br>
//鼠标移动到一级菜单上执行 <br>
dropit: function(obj, e, dropmenuID) { <br>
//隐藏上次显示的二级菜单 <br>
if (this.dropmenuobj != null) this.dropmenuobj.style.visibility = "hidden"; <br>
this.clearhidemenu(); <br>
if (this.ie || this.firefox) { <br>
var me = this; <br>
//一级菜单鼠标离开事件 <br>
obj.onmouseout = function() { <br>
cssdropdown.delayhidemenu(); <br>
}; <br>
//一级菜单鼠标点击事件 <br>
obj.onclick = function() { <br>
return ! cssdropdown.disablemenuclick <br>
}; <br>
if (!dropmenuID) { <br>
return; <br>
} <br>
this.dropmenuobj = document.getElementById(dropmenuID); <br>
if (!this.dropmenuobj) return; <br>
//为二级菜单绑定鼠标移动到事件 <br>
this.dropmenuobj.onmouseover = function() { <br>
//移除从一级菜单离开时触发的方法,防止误执行 <br>
cssdropdown.clearhidemenu(); <br>
} <br>
//为二级菜单绑定鼠标离开事件 <br>
this.dropmenuobj.onmouseout = function(e) { <br>
cssdropdown.dynamichide(e); <br>
} <br>
//为二级菜单绑定鼠标点击事件 <br>
this.dropmenuobj.onclick = function() { <br>
cssdropdown.delayhidemenu(); <br>
} <br>
this.showhide(this.dropmenuobj.style, e); <br>
//调整二级菜单位置,以免位置错乱 <br>
this.dropmenuobj.x = this.getposOffset(obj, "left"); <br>
this.dropmenuobj.y = this.getposOffset(obj, "top"); <br>
this.dropmenuobj.style.left = this.dropmenuobj.x - this.clearbrowseredge(obj, "rightedge") + "px"; <br>
this.dropmenuobj.style.top = this.dropmenuobj.y - this.clearbrowseredge(obj, "bottomedge") + obj.offsetHeight + 1 + "px"; <br>
this.positionshim(); <br>
} <br>
}, <br>
positionshim: function() { <br>
if (this.enableiframeshim && typeof this.shimobject != "undefined") { <br>
if (this.dropmenuobj.style.visibility == "visible") { <br>
this.shimobject.style.width = this.dropmenuobj.offsetWidth + "px"; <br>
this.shimobject.style.height = this.dropmenuobj.offsetHeight + "px"; <br>
this.shimobject.style.left = this.dropmenuobj.style.left; <br>
this.shimobject.style.top = this.dropmenuobj.style.top; <br>
} <br>
this.shimobject.style.display = (this.dropmenuobj.style.visibility == "visible") ? "block": "none"; <br>
} <br>
}, <br>
hideshim: function() { <br>
if (this.enableiframeshim && typeof this.shimobject != "undefined") this.shimobject.style.display = 'none'; <br>
}, <br>
contains_firefox: function(a, b) { <br>
while (b.parentNode) if ((b = b.parentNode) == a) return true; <br>
return false; <br>
}, <br>
//隐藏二级菜单,兼容性处理 <br>
dynamichide: function(e) { <br>
var evtobj = window.event ? window.event: e; <br>
//确认是鼠标离开事件,避免误触发 <br>
if (this.ie && !this.dropmenuobj.contains(evtobj.toElement)) this.delayhidemenu(); <br>
else if (this.firefox && e.currentTarget != evtobj.relatedTarget && !this.contains_firefox(evtobj.currentTarget, evtobj.relatedTarget)) this.delayhidemenu(); <br>
}, <br>
//鼠标点击菜单,或者离开菜单时执行 <br>
delayhidemenu: function() { <br>
this.delayhide = setTimeout(function() { <br>
cssdropdown.dropmenuobj.style.visibility = 'hidden'; <br>
cssdropdown.hideshim(); <br>
cssdropdown.showAlways(); <br>
}, <br>
this.disappeardelay); <br>
}, <br>
//移除定时方法 <br>
clearhidemenu: function() { <br>
if (this.delayhide != "undefined") clearTimeout(this.delayhide); <br>
}, <br>
//显示默认被选中的一级菜单 <br>
showAlways: function() { <br>
if (this.always) { <br>
this.always.onmouseover({ <br>
type: "mouseover" <br>
}); <br>
} <br>
}, <br>
//初始化 <br>
startchrome: function() { <br>
for (var ids = 0; ids < arguments.length; ids++) { <br>
var menuitems = document.getElementById(arguments).getElementsByTagName("a"); <br>
for (var i = 0; i < menuitems.length; i++) { <br>
var relvalue = menuitems.getAttribute("rel"); <br>
//绑定鼠标移动到事件 <br>
menuitems.onmouseover = function(e) { <br>
var event = typeof e != "undefined" ? e: window.event; <br>
cssdropdown.dropit(this, event, this.getAttribute("rel")); <br>
}; <br>
//显示默认被选中的一级菜单 <br>
if (!this.always && menuitems.parentNode.getAttribute("class") == "navselect") { <br>
this.always = menuitems; <br>
this.showAlways(); <br>
} <br>
} <br>
} <br>
if (window.createPopup && !window.XmlHttpRequest) { <br>
document.write('<IFRAME id="iframeshim" src="" frameBorder="0" scrolling="no"></IFRAME>'); <br>
this.shimobject = document.getElementById("iframeshim"); <br>
} <br>
} <br>
} </p>
頁:
[1]