周武 發表於 2023-10-24 00:00:00

织梦(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>
        &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; <br>
        &lt;html xmlns="http://www.w3.org/1999/xhtml"&gt; <br>
        &lt;head&gt; <br>
        &lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /&gt; <br>
        &lt;title&gt;我的网站&lt;/title&gt; <br>
        &lt;meta name="description" content="" /&gt; <br>
        &lt;meta name="keywords" content="" /&gt; <br>
        &lt;link type="text/css" rel="stylesheet" href="http://www.188163.com/img/fnews/css/style.css" /&gt; <br>
        &lt;/head&gt; <br>
        &lt;body&gt; <br>
        &lt;div class="w1000"&gt; <br>
        &lt;div class="w960"&gt; <br>
        &lt;!--f1--&gt; <br>
        &lt;!-- 菜单 --&gt; <br>
        &lt;div id="menu" class="menus"&gt; <br>
        &lt;ul&gt; <br>
        &lt;!-- class='navselect'根据此属性来判断需要默认显示的二级菜单,以便在织梦模板中通用 --&gt; <br>
        &lt;li class='navselect'&gt;&lt;a href="/" rel='dropmenu1'&gt;主 页&lt;/a&gt;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href='/a/jinrongzixun/'&gt;金融资讯&lt;/a&gt;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href='/a/gerenjinrong/' rel='dropmenu2'&gt;个人金融&lt;/a&gt;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href='/a/qiyejinrong/' rel='dropmenu4'&gt;企业金融&lt;/a&gt;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href='/a/caijingpindao/' rel='dropmenu5'&gt;财经频道&lt;/a&gt;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href='/a/zhifujiesuan/' rel='dropmenu6'&gt;支付结算&lt;/a&gt;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href='/a/yewushenqingtongdao/' rel='dropmenu7'&gt;业务申请&lt;/a&gt;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href='/a/zhongyaogonggao/' &gt;重要公告&lt;/a&gt;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href='/a/xinyongka/' &gt;信用卡&lt;/a&gt;&lt;/li&gt; <br>
        &lt;/ul&gt; <br>
        &lt;/div&gt; <br>
        &lt;div class="menus_bottom"&gt; <br>
        &lt;/div&gt; <br>
        &lt;!-- //二级子类下拉菜单 --&gt; <br>
         <br>
        &lt;ul id="dropmenu1" class="dropMenu"&gt; <br>
        &lt;li&gt;&lt;a href="/a/gerenjinrong/touzilicai/"&gt;首页列表&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;/ul&gt; <br>
        &lt;ul id="dropmenu2" class="dropMenu"&gt; <br>
        &lt;li&gt;&lt;a href="/a/gerenjinrong/touzilicai/"&gt;投资理财&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href="/a/gerenjinrong/grdk/"&gt;个人贷款&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href="/a/gerenjinrong/gerenxiaofei/"&gt;个人消费贷款&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href="/a/gerenjinrong/xinyong/"&gt;信用贷款&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href="/a/gerenjinrong/qichedaikuan/"&gt;汽车贷款&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href="/a/gerenjinrong/yishoulou/"&gt;一手楼按揭&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href="/a/gerenjinrong/ershoulou/"&gt;二手楼按揭&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href="/a/gerenjinrong/grjy/"&gt;个人经营贷款&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;/ul&gt; <br>
        &lt;ul id="dropmenu4" class="dropMenu"&gt; <br>
        &lt;li&gt;&lt;a href="/a/qiyejinrong/gongsirongzi/"&gt;公司融资&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href="/a/qiyejinrong/maoyirongzi/"&gt;贸易融资&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href="/a/qiyejinrong/gongsilicai/"&gt;公司理财&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href="/a/qiyejinrong/piaojuyewu/"&gt;票据业务&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href="/a/qiyejinrong/xiangmurongzi/"&gt;项目融资&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;/ul&gt; <br>
        &lt;ul id="dropmenu5" class="dropMenu"&gt; <br>
        &lt;li&gt;&lt;a href="/a/caijingpindao/huangjin/"&gt;黄金&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href="/a/caijingpindao/zhaiquan/"&gt;债券&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href="/a/caijingpindao/waihui/"&gt;外汇&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href="/a/caijingpindao/jijin/"&gt;基金&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;/ul&gt; <br>
        &lt;ul id="dropmenu6" class="dropMenu"&gt; <br>
        &lt;li&gt;&lt;a href="/a/zhifujiesuan/pos/"&gt;P0S支付&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;/ul&gt; <br>
        &lt;ul id="dropmenu7" class="dropMenu"&gt; <br>
        &lt;li&gt;&lt;a href="/a/yewushenqingtongdao/gerenyewu/"&gt;个人业务咨询&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;li&gt;&lt;a href="/a/yewushenqingtongdao/gongsiyewu/"&gt;公司业务咨询&lt;/a&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&lt;/li&gt; <br>
        &lt;/ul&gt; <br>
        &lt;ul id="dropmenu8" class="dropMenu"&gt; <br>
        &lt;/ul&gt; <br>
        &lt;ul id="dropmenu3" class="dropMenu"&gt; <br>
        &lt;/ul&gt; <br>
         <br>
        &lt;/div&gt; <br>
        &lt;/div&gt; <br>
        &lt;!--1000 end --&gt; <br>
        &lt;/body&gt; <br>
        &lt;/html&gt; </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 &amp;&amp; !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 &lt; 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" &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; !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 &lt; this.dropmenuobj.contentmeasure) edgeoffset = this.dropmenuobj.contentmeasure - obj.offsetWidth; <br>
        } else { <br>
        var topedge = this.ie &amp;&amp; !window.opera ? this.iecompattest().scrollTop: window.pageYOffset; <br>
        var windowedge = this.ie &amp;&amp; !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 &lt; this.dropmenuobj.contentmeasure) { <br>
        edgeoffset = this.dropmenuobj.contentmeasure + obj.offsetHeight; <br>
        if ((this.dropmenuobj.y - topedge) &lt; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; !this.dropmenuobj.contains(evtobj.toElement)) this.delayhidemenu(); <br>
        else if (this.firefox &amp;&amp; e.currentTarget != evtobj.relatedTarget &amp;&amp; !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 &lt; arguments.length; ids++) { <br>
        var menuitems = document.getElementById(arguments).getElementsByTagName("a"); <br>
        for (var i = 0; i &lt; 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 &amp;&amp; menuitems.parentNode.getAttribute("class") == "navselect") { <br>
        this.always = menuitems; <br>
        this.showAlways(); <br>
        } <br>
        } <br>
        } <br>
        if (window.createPopup &amp;&amp; !window.XmlHttpRequest) { <br>
        document.write('&lt;IFRAME id="iframeshim" src="" frameBorder="0" scrolling="no"&gt;&lt;/IFRAME&gt;'); <br>
        this.shimobject = document.getElementById("iframeshim"); <br>
        } <br>
        } <br>
        } </p>
頁: [1]
查看完整版本: 织梦(dedecms)导航条dropdown.js的改进(附演示demo)