2016-04-12 11 views
1

Vielen Dank für die Zeit nehmen, um mir zu helfen, ich habe nicht viel Wissen in Javascript, aber ich versuche, ein riesiges Menü für meine Website zu machen, wird das Menü viele Untermenüs haben und die Untermenüs werden Untermenüs haben, ich weiß, dass es verrückt scheint. Anywy, das Glück ist, dass ich einen Js-Code für mein Menü gefunden habe, das Problem ist, es ist onmouseover Modus (Hover) und es ist nicht bequem für meine Website-Besucher durch das Menü bcs zu navigieren, es ist so riesig, ich fragte mich, ob von Sie können diesen Code ein wenig optimieren und das Menü nach einer bestimmten Zeitüberschreitung, sagen wir 5 Sekunden, verschwinden lassen. Da das Problem jetzt ist, wenn der Besucher das Menü durchsucht, sobald der Mauszeiger etwas außerhalb des Menüs ist, wird das Menü ausgeblendet, ich möchte ein Zeitlimit setzen, bevor es ausgeblendet wird. danke im voraus!Javascript verstecken Dropdown-Menü auf Timeout

prost

dies ist der js Code

var mcVM_options = { 
    menuId: "menu-v", 
    alignWithMainMenu: false 
}; 

init_v_menu(mcVM_options); 

function init_v_menu(a) { 
    if (window.addEventListener) window.addEventListener("load", function() { 
    start_v_menu(a) 
    }, false); 
    else window.attachEvent && window.attachEvent("onload", function() { 
    start_v_menu(a) 
    }) 
} 

function start_v_menu(i) { 
    var e = document.getElementById(i.menuId), 
    j = e.offsetHeight, 
    b = e.getElementsByTagName("ul"), 
    g = /msie|MSIE 6/.test(navigator.userAgent); 
    if (g) 
    for (var h = e.getElementsByTagName("li"), a = 0, l = h.length; a < l; a++) { 
     h[a].onmouseover = function() { 
     this.className = "onhover" 
     }; 
     h[a].onmouseout = function() { 
     this.className = "" 
     } 
    } 
    for (var k = function(a, b) { 
     if (a.id == i.menuId) return b; 
     else { 
     b += a.offsetTop; 
     return k(a.parentNode.parentNode, b) 
     } 
    }, a = 0; a < b.length; a++) { 
    var c = b[a].parentNode; 
    c.getElementsByTagName("a")[0].className += " arrow"; 
    b[a].style.left = c.offsetWidth + "px"; 
    b[a].style.top = c.offsetTop + "px"; 
    if (i.alignWithMainMenu) { 
     var d = k(c.parentNode, 0); 
     if (b[a].offsetTop + b[a].offsetHeight + d > j) { 
     var f; 
     if (b[a].offsetHeight > j) f = -d; 
     else f = j - b[a].offsetHeight - d; 
     b[a].style.top = f + "px" 
     } 
    } 
    c.onmouseover = function() { 
     if (g) this.className = "onhover"; 
     var a = this.getElementsByTagName("ul")[0]; 
     if (a) { 
     a.style.visibility = "visible"; 
     a.style.display = "block" 
     } 
    }; 
    c.onmouseout = function() { 
     if (g) this.className = ""; 
     this.getElementsByTagName("ul")[0].style.visibility = "hidden"; 
     this.getElementsByTagName("ul")[0].style.display = "none" 
    } 
    } 
    for (var a = b.length - 1; a > -1; a--) b[a].style.display = "none" 
} 
+0

Vielleicht kann u zu diesem Thema suchen? http://stackoverflow.com/questions/820951/hide-div-after-a-few-seconds Wenn Sie ein Problem haben, sagen Sie mir –

Antwort

0

Versuch setTimeOut Methode, um Ihren Code hinzufügen. Sie können weitere Informationen auf den folgenden Link finden: http://www.w3schools.com/jsref/met_win_settimeout.asp

finden Sie die bearbeitete Code unten:

init_v_menu(mcVM_options); 

function init_v_menu(a) { 
if (window.addEventListener) window.addEventListener("load", function() { 
    start_v_menu(a) 
}, false); 
else window.attachEvent && window.attachEvent("onload", function() { 
    start_v_menu(a) 
}) 
} 

function start_v_menu(i) { 
var e = document.getElementById(i.menuId), 
    j = e.offsetHeight, 
    b = e.getElementsByTagName("ul"), 
    g = /msie|MSIE 6/.test(navigator.userAgent); 
if (g) 
    for (var h = e.getElementsByTagName("li"), a = 0, l = h.length; aj) { 
     var f; 
     if (b[a].offsetHeight > j) f = -d; 
     else f = j - b[a].offsetHeight - d; 
     b[a].style.top = f + "px" 
    } 
} 
c.onmouseover = function() { 
if (g) this.className = "onhover"; 
var a = this.getElementsByTagName("ul")[0]; 
if (a) { 
    a.style.visibility = "visible"; 
    a.style.display = "block" 
} 
}; 
c.onmouseout = function() { 
setTimeout(function() { 
    if (g) this.className = ""; 
    this.getElementsByTagName("ul")[0].style.visibility = "hidden"; 
    this.getElementsByTagName("ul")[0].style.display = "none" 
}, 3000); 
} 
} 
for (var a = b.length - 1; a > -1; a--) b[a].style.display = "none" 
} 
0

Ihr Code nicht sehr verständlich ist für mich (Variablen Bedeutung haben nicht), aber ich denke, man diesen Teil des Codes ändern

c.onmouseout = function() { 
    if (g) this.className = ""; 
    this.getElementsByTagName("ul")[0].style.visibility = "hidden"; 
    this.getElementsByTagName("ul")[0].style.display = "none" 
} 

um so etwas wie

c.onmouseout = function() { 
    setTimeout(function(){ 
     var g= g = /msie|MSIE 6/.test(navigator.userAgent); 
     if (g) this.className = ""; 
     this.getElementsByTagName("ul")[0].style.visibility = "hidden"; 
     this.getElementsByTagName("ul")[0].style.display = "none" ; 
    }.bind(this), 5000); 
} 
+0

:(funktioniert nicht, Jungs ist es einfacher, das Menü zu verbergen, wenn die Benutzer klickt aus dem Menü heraus? ich denke, dass es noch sicherer ist, als heraus von der Speisekarte zu schweben, bitte helfen Sie mir, danke! –

+0

natürlich. Wenn ich 'etwas wie' schrieb, bedeutet es, dass Sie unseren Code anpassen müssen. Ich weiß, was ist die 'g'Variable, aber es muss im SetTimeout Callback neu definiert werden.Ich habe gerade meine Antwort behoben. –