www.gusucode.com > 艺帆全站DIV+CSS体育用品公司网站源码 1.7.5源码程序 > i5808/images/menu.js
var jsmenu = new Array(); var ctrlobjclassName; jsmenu['active'] = new Array(); jsmenu['timer'] = new Array(); jsmenu['iframe'] = new Array(); function initCtrl(ctrlobj, click, duration, timeout, layer) { if(ctrlobj && !ctrlobj.initialized) { ctrlobj.initialized = true; ctrlobj.unselectable = true; ctrlobj.outfunc = typeof ctrlobj.onmouseout == 'function' ? ctrlobj.onmouseout : null; ctrlobj.onmouseout = function() { if(this.outfunc) this.outfunc(); if(duration < 3) jsmenu['timer'][ctrlobj.id] = setTimeout('hideMenu(' + layer + ')', timeout); } if(click && duration) { ctrlobj.clickfunc = typeof ctrlobj.onclick == 'function' ? ctrlobj.onclick : null; ctrlobj.onclick = function (e) { doane(e); if(jsmenu['active'][layer] == null || jsmenu['active'][layer].ctrlkey != this.id) { if(this.clickfunc) this.clickfunc(); else showMenu(this.id, true); } else { hideMenu(layer); } } } ctrlobj.overfunc = typeof ctrlobj.onmouseover == 'function' ? ctrlobj.onmouseover : null; ctrlobj.onmouseover = function(e) { doane(e); if(this.overfunc) this.overfunc(); if(click) { clearTimeout(jsmenu['timer'][this.id]); } else { for(var id in jsmenu['timer']) { if(jsmenu['timer'][id]) clearTimeout(jsmenu['timer'][id]); } } } } } function initMenu(ctrlid, menuobj, duration, timeout, layer) { if(menuobj && !menuobj.initialized) { menuobj.initialized = true; menuobj.ctrlkey = ctrlid; menuobj.onclick = ebygum; menuobj.style.position = 'absolute'; if(duration < 3) { if(duration > 1) { menuobj.onmouseover = function() { clearTimeout(jsmenu['timer'][ctrlid]); } } if(duration != 1) { menuobj.onmouseout = function() { jsmenu['timer'][ctrlid] = setTimeout('hideMenu(' + layer + ')', timeout); } } } menuobj.style.zIndex = 50; if(is_ie) { menuobj.style.filter += "progid:DXImageTransform.Microsoft.shadow(direction=135,color=#CCCCCC,strength=2)"; } } } function showMenu(ctrlid, click, offset, duration, timeout, layer, showid, maxh) { e = window.event ? window.event : showMenu.caller.arguments[0]; var ctrlobj = $(ctrlid); if(!ctrlobj) return; if(isUndefined(click)) click = false; if(isUndefined(offset)) offset = 0; if(isUndefined(duration)) duration = 2; if(isUndefined(timeout)) timeout = 500; if(isUndefined(layer)) layer = 0; if(isUndefined(showid)) showid = ctrlid; var showobj = $(showid); var menuobj = $(showid + '_menu'); if(!showobj|| !menuobj) return; if(isUndefined(maxh)) maxh = 400; hideMenu(layer); for(var id in jsmenu['timer']) { if(jsmenu['timer'][id]) clearTimeout(jsmenu['timer'][id]); } initCtrl(ctrlobj, click, duration, timeout, layer); ctrlobjclassName = ctrlobj.className; ctrlobj.className += ' hover'; initMenu(ctrlid, menuobj, duration, timeout, layer); menuobj.style.display = ''; if(!is_opera) { menuobj.style.clip = 'rect(auto, auto, auto, auto)'; } setMenuPosition(showid, offset); if(is_ie && is_ie < 7) { if(!jsmenu['iframe'][layer]) { var iframe = document.createElement('iframe'); iframe.style.display = 'none'; iframe.style.position = 'absolute'; iframe.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)'; $('append_parent') ? $('append_parent').appendChild(iframe) : menuobj.parentNode.appendChild(iframe); jsmenu['iframe'][layer] = iframe; } jsmenu['iframe'][layer].style.top = menuobj.style.top; jsmenu['iframe'][layer].style.left = menuobj.style.left; jsmenu['iframe'][layer].style.width = menuobj.w; jsmenu['iframe'][layer].style.height = menuobj.h; jsmenu['iframe'][layer].style.display = 'block'; } if(maxh && menuobj.scrollHeight > maxh) { menuobj.style.height = maxh + 'px'; if(is_opera) { menuobj.style.overflow = 'auto'; } else { menuobj.style.overflowY = 'auto'; } } if(!duration) { setTimeout('hideMenu(' + layer + ')', timeout); } jsmenu['active'][layer] = menuobj; } function setMenuPosition(showid, offset) { var showobj = $(showid); var menuobj = $(showid + '_menu'); if(isUndefined(offset)) offset = 0; if(showobj) { showobj.pos = fetchOffset(showobj); showobj.X = showobj.pos['left']; showobj.Y = showobj.pos['top']; showobj.w = showobj.offsetWidth; showobj.h = showobj.offsetHeight; menuobj.w = menuobj.offsetWidth; menuobj.h = menuobj.offsetHeight; menuobj.style.left = (showobj.X + menuobj.w > document.body.clientWidth) && (showobj.X + showobj.w - menuobj.w >= 0) ? showobj.X + showobj.w - menuobj.w + 'px' : showobj.X + 'px'; menuobj.style.top = offset == 1 ? showobj.Y + 'px' : (offset == 2 || ((showobj.Y + showobj.h + menuobj.h > document.documentElement.scrollTop + document.documentElement.clientHeight) && (showobj.Y - menuobj.h >= 0)) ? (showobj.Y - menuobj.h) + 'px' : showobj.Y + showobj.h + 'px'); if(menuobj.style.clip && !is_opera) { menuobj.style.clip = 'rect(auto, auto, auto, auto)'; } } } function hideMenu(layer) { if(isUndefined(layer)) layer = 0; if(jsmenu['active'][layer]) { try { $(jsmenu['active'][layer].ctrlkey).className = ctrlobjclassName; } catch(e) {} clearTimeout(jsmenu['timer'][jsmenu['active'][layer].ctrlkey]); jsmenu['active'][layer].style.display = 'none'; if(is_ie && is_ie < 7 && jsmenu['iframe'][layer]) { jsmenu['iframe'][layer].style.display = 'none'; } jsmenu['active'][layer] = null; } } function fetchOffset(obj) { var left_offset = obj.offsetLeft; var top_offset = obj.offsetTop; while((obj = obj.offsetParent) != null) { left_offset += obj.offsetLeft; top_offset += obj.offsetTop; } return { 'left' : left_offset, 'top' : top_offset }; } function ebygum(eventobj) { if(!eventobj || is_ie) { window.event.cancelBubble = true; return window.event; } else { if(eventobj.target.type == 'submit') { eventobj.target.form.submit(); } eventobj.stopPropagation(); return eventobj; } } function menuoption_onclick_function(e) { this.clickfunc(); hideMenu(); } function menuoption_onclick_link(e) { choose(e, this); } function menuoption_onmouseover(e) { this.className = 'popupmenu_highlight'; } function menuoption_onmouseout(e) { this.className = 'popupmenu_option'; } function choose(e, obj) { var links = obj.getElementsByTagName('a'); if(links[0]) { if(is_ie) { links[0].click(); window.event.cancelBubble = true; } else { if(e.shiftKey) { window.open(links[0].href); e.stopPropagation(); e.preventDefault(); } else { window.location = links[0].href; e.stopPropagation(); e.preventDefault(); } } hideMenu(); } }