织梦(dedecms)导航条dropdown.js的改进(附演示demo)
来源: 阅读:1830 次 日期:2016-06-29 10:03:16
温馨提示: 小编为您整理了“织梦(dedecms)导航条dropdown.js的改进(附演示demo)”,方便广大网友查阅!

可以设置一个一直都显示的二级菜单,修复了没有二级菜单时鼠标移上去仍然显示上一个二级菜单的问题.支持一级菜单鼠标离开事件,具体实现修改如下,附演示地址,感兴趣的朋友可以参考下哈,希望对大家有所帮助

可以设置一个一直都显示的二级菜单,修复了没有二级菜单时鼠标移上去仍然显示上一个二级菜单的问题.支持一级菜单鼠标离开事件

html代码

代码如下:

我的网站

Baidu
map

dropdown.js

代码如下:

var cssdropdown = {

disappeardelay: 250,

disablemenuclick: false,

enableswipe: 1,

enableiframeshim: 1,

dropmenuobj: null,

ie: document.all,

firefox: document.getElementById && !document.all,

swipetimer: undefined,

bottomclip: 0,

getposOffset: function(what, offsettype) {

var totaloffset = (offsettype == "left") ? what.offsetLeft: what.offsetTop;

var parentEl = what.offsetParent;

while (parentEl != null) {

totaloffset = (offsettype == "left") ? totaloffset + parentEl.offsetLeft: totaloffset + parentEl.offsetTop;

parentEl = parentEl.offsetParent;

}

return totaloffset;

},

swipeeffect: function() {

if (this.bottomclip < parseInt(this.dropmenuobj.offsetHeight)) {

this.bottomclip += 10 + (this.bottomclip / 10);

this.dropmenuobj.style.clip = "rect(0 auto " + this.bottomclip + "px 0)";

} else return;

this.swipetimer = setTimeout("cssdropdown.swipeeffect()", 10);

},

//隐藏或者显示二级菜单

showhide: function(obj, e) {

if (this.ie || this.firefox) this.dropmenuobj.style.left = this.dropmenuobj.style.top = "-500px";

if (e.type == "click" && obj.visibility == hidden || e.type == "mouseover") {

if (this.enableswipe == 1) {

if (typeof this.swipetimer != "undefined") clearTimeout(this.swipetimer);

obj.clip = "rect(0 auto 0 0)";

this.bottomclip = 0;

this.swipeeffect();

}

obj.visibility = "visible";

} else if (e.type == "click") obj.visibility = "hidden";

},

iecompattest: function() {

return (document.compatMode && document.compatMode != "BackCompat") ? document.documentElement: document.body;

},

clearbrowseredge: function(obj, whichedge) {

var edgeoffset = 0;

if (whichedge == "rightedge") {

var windowedge = this.ie && !window.opera ? this.iecompattest().scrollLeft + this.iecompattest().clientWidth - 15 : window.pageXOffset + window.innerWidth - 15;

this.dropmenuobj.contentmeasure = this.dropmenuobj.offsetWidth;

if (windowedge - this.dropmenuobj.x < this.dropmenuobj.contentmeasure) edgeoffset = this.dropmenuobj.contentmeasure - obj.offsetWidth;

} else {

var topedge = this.ie && !window.opera ? this.iecompattest().scrollTop: window.pageYOffset;

var windowedge = this.ie && !window.opera ? this.iecompattest().scrollTop + this.iecompattest().clientHeight - 15 : window.pageYOffset + window.innerHeight - 18;

this.dropmenuobj.contentmeasure = this.dropmenuobj.offsetHeight;

if (windowedge - this.dropmenuobj.y < this.dropmenuobj.contentmeasure) {

edgeoffset = this.dropmenuobj.contentmeasure + obj.offsetHeight;

if ((this.dropmenuobj.y - topedge) < this.dropmenuobj.contentmeasure) edgeoffset = this.dropmenuobj.y + obj.offsetHeight - topedge;

}

}

return edgeoffset;

},

//鼠标移动到一级菜单上执行

dropit: function(obj, e, dropmenuID) {

//隐藏上次显示的二级菜单

if (this.dropmenuobj != null) this.dropmenuobj.style.visibility = "hidden";

this.clearhidemenu();

if (this.ie || this.firefox) {

var me = this;

//一级菜单鼠标离开事件

obj.onmouseout = function() {

cssdropdown.delayhidemenu();

};

//一级菜单鼠标点击事件

obj.onclick = function() {

return ! cssdropdown.disablemenuclick

};

if (!dropmenuID) {

return;

}

this.dropmenuobj = document.getElementById(dropmenuID);

if (!this.dropmenuobj) return;

//为二级菜单绑定鼠标移动到事件

this.dropmenuobj.onmouseover = function() {

//移除从一级菜单离开时触发的方法,防止误执行

cssdropdown.clearhidemenu();

}

//为二级菜单绑定鼠标离开事件

this.dropmenuobj.onmouseout = function(e) {

cssdropdown.dynamichide(e);

}

//为二级菜单绑定鼠标点击事件

this.dropmenuobj.onclick = function() {

cssdropdown.delayhidemenu();

}

this.showhide(this.dropmenuobj.style, e);

//调整二级菜单位置,以免位置错乱

this.dropmenuobj.x = this.getposOffset(obj, "left");

this.dropmenuobj.y = this.getposOffset(obj, "top");

this.dropmenuobj.style.left = this.dropmenuobj.x - this.clearbrowseredge(obj, "rightedge") + "px";

this.dropmenuobj.style.top = this.dropmenuobj.y - this.clearbrowseredge(obj, "bottomedge") + obj.offsetHeight + 1 + "px";

this.positionshim();

}

},

positionshim: function() {

if (this.enableiframeshim && typeof this.shimobject != "undefined") {

if (this.dropmenuobj.style.visibility == "visible") {

this.shimobject.style.width = this.dropmenuobj.offsetWidth + "px";

this.shimobject.style.height = this.dropmenuobj.offsetHeight + "px";

this.shimobject.style.left = this.dropmenuobj.style.left;

this.shimobject.style.top = this.dropmenuobj.style.top;

}

this.shimobject.style.display = (this.dropmenuobj.style.visibility == "visible") ? "block": "none";

}

},

hideshim: function() {

if (this.enableiframeshim && typeof this.shimobject != "undefined") this.shimobject.style.display = 'none';

},

contains_firefox: function(a, b) {

while (b.parentNode) if ((b = b.parentNode) == a) return true;

return false;

},

//隐藏二级菜单,兼容性处理

dynamichide: function(e) {

var evtobj = window.event ? window.event: e;

//确认是鼠标离开事件,避免误触发

if (this.ie && !this.dropmenuobj.contains(evtobj.toElement)) this.delayhidemenu();

else if (this.firefox && e.currentTarget != evtobj.relatedTarget && !this.contains_firefox(evtobj.currentTarget, evtobj.relatedTarget)) this.delayhidemenu();

},

//鼠标点击菜单,或者离开菜单时执行

delayhidemenu: function() {

this.delayhide = setTimeout(function() {

cssdropdown.dropmenuobj.style.visibility = 'hidden';

cssdropdown.hideshim();

cssdropdown.showAlways();

},

this.disappeardelay);

},

//移除定时方法

clearhidemenu: function() {

if (this.delayhide != "undefined") clearTimeout(this.delayhide);

},

//显示默认被选中的一级菜单

showAlways: function() {

if (this.always) {

this.always.onmouseover({

type: "mouseover"

});

}

},

//初始化

startchrome: function() {

for (var ids = 0; ids < arguments.length; ids++) {

var menuitems = document.getElementById(arguments[ids]).getElementsByTagName("a");

for (var i = 0; i < menuitems.length; i++) {

var relvalue = menuitems[i].getAttribute("rel");

//绑定鼠标移动到事件

menuitems[i].onmouseover = function(e) {

var event = typeof e != "undefined" ? e: window.event;

cssdropdown.dropit(this, event, this.getAttribute("rel"));

};

//显示默认被选中的一级菜单

if (!this.always && menuitems[i].parentNode.getAttribute("class") == "navselect") {

this.always = menuitems[i];

this.showAlways();

}

}

}

if (window.createPopup && !window.XmlHttpRequest) {

document.write('');

this.shimobject = document.getElementById("iframeshim");

}

}

}

更多信息请查看 CMS教程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
相关阅读 CMS教程

2026上岸·考公考编培训报班

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们| 联系我们| 人才招聘| 网站声明| 网站帮助| 非正式的简要咨询| 简要咨询须知| 新媒体/短视频平台| 手机站点| 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65099533/13759567129 获取招聘考试信息及咨询关注公众号:
咨询QQ:1093837350(9:00—18:00) 版权所有:
云南网警报警专用图标
Baidu
map