我使用jQuery MegaMenu 2版從www.geektantra.com創建延遲,http://www.geektantra.com/2010/05/jquery-megamenu-2/兆豐菜單上的Javascript對deactivate_action
我想設置一個超時當鼠標沒有懸停菜單。因此,只要將鼠標移出菜單,當鼠標移動到菜單中時,它就會關閉菜單。我希望它在消失前等待三秒鐘。
選項中的mm_timeout
沒有做任何事情。 options.mm_timeout = 0;
爲activate_action
可以延遲菜單的加載,但deactivate_action
沒有任何內容。 slideUp
方法可以更改爲慢,但只能等待一秒以下。我是新來的JQuery,謝謝
這是jquery.megamenu.js文件:
/*
jQuery MegaMenu Plugin
Author: GeekTantra
Author URI: http://www.geektantra.com
*/
var isIE6 = navigator.userAgent.toLowerCase().indexOf('msie 6') != -1;
jQuery.fn.megamenu = function(options) {
options = jQuery.extend({
activate_action: "mouseover",
deactivate_action: "mouseleave",
show_method: "slideDown",
hide_method: "slideUp",
justify: "left",
enable_js_shadow: true,
shadow_size: 3,
mm_timeout: 250
}, options);
var $megamenu_object = this;
if(options.activate_action == "click") options.mm_timeout = 0;
$megamenu_object.children("li").each(function(){
jQuery(this).addClass("mm-item");
jQuery(".mm-item").css({ 'float': options.justify });
jQuery(this).find("div:first").addClass("mm-item-content");
jQuery(this).find("a:first").addClass("mm-item-link");
var $mm_item_content = jQuery(this).find(".mm-item-content");
var $mm_item_link = jQuery(this).find(".mm-item-link");
$mm_item_content.hide();
jQuery(document).bind("click", function(){
jQuery(".mm-item-content").hide();
jQuery(".mm-item-link").removeClass("mm-item-link-hover");
});
jQuery(this).bind("click", function(e){
e.stopPropagation();
});
$mm_item_content.wrapInner('<div class="mm-content-base"></div>');
if(options.enable_js_shadow == true) {
$mm_item_content.append('<div class="mm-js-shadow"></div>');
}
var $mm_timer = 0;
// Activation Method Starts
jQuery(this).bind(options.activate_action, function(e){
e.stopPropagation();
var mm_item_link_obj = jQuery(this).find("a.mm-item-link");
var mm_item_content_obj = jQuery(this).find("div.mm-item-content");
clearTimeout($mm_timer);
$mm_timer = setTimeout(function(){ //Emulate HoverIntent
mm_item_link_obj.addClass("mm-item-link-hover");
mm_item_content_obj.css({
'top': ($mm_item_link.offset().top + $mm_item_link.outerHeight()) - 1 +"px",
'left': ($mm_item_link.offset().left) - 5 + 'px'
})
if(options.justify == "left"){
var mm_object_right_end = $megamenu_object.offset().left + $megamenu_object.outerWidth();
// Coordinates of the right end of the megamenu object
var mm_content_right_end = $mm_item_link.offset().left + $mm_item_content.outerWidth() - 5 ;
// Coordinates of the right end of the megamenu content
if(mm_content_right_end >= mm_object_right_end) { // Menu content exceeding the outer box
mm_item_content_obj.css({
'left': ($mm_item_link.offset().left - (mm_content_right_end - mm_object_right_end)) - 2 + 'px'
}); // Limit megamenu inside the outer box
}
} else if(options.justify == "right") {
var mm_object_left_end = $megamenu_object.offset().left;
// Coordinates of the left end of the megamenu object
var mm_content_left_end = $mm_item_link.offset().left - mm_item_content_obj.outerWidth() +
$mm_item_link.outerWidth() + 5;
// Coordinates of the left end of the megamenu content
if(mm_content_left_end <= mm_object_left_end) { // Menu content exceeding the outer box
mm_item_content_obj.css({
'left': mm_object_left_end + 2 + 'px'
}); // Limit megamenu inside the outer box
} else {
mm_item_content_obj.css({
'left': mm_content_left_end + 'px'
}); // Limit megamenu inside the outer box
}
}
if(options.enable_js_shadow == true) {
mm_item_content_obj.find(".mm-js-shadow").height(mm_item_content_obj.height());
mm_item_content_obj.find(".mm-js-shadow").width(mm_item_content_obj.width());
mm_item_content_obj.find(".mm-js-shadow").css({
'top': (options.shadow_size) + (isIE6 ? 2 : 0) + "px",
'left': (options.shadow_size) + (isIE6 ? 2 : 0) + "px",
'opacity': 0.5
});
}
switch(options.show_method) {
case "simple":
mm_item_content_obj.show();
break;
case "slideDown":
mm_item_content_obj.height("auto");
mm_item_content_obj.slideDown('fast');
break;
case "fadeIn":
mm_item_content_obj.fadeTo('fast', 1);
break;
default:
mm_item_content_obj.each(options.show_method);
break;
}
}, options.mm_timeout);
});
// Activation Method Ends
// Deactivation Method Starts
jQuery(this).bind(options.deactivate_action, function(e){
e.stopPropagation();
clearTimeout($mm_timer);
var mm_item_link_obj = jQuery(this).find("a.mm-item-link");
var mm_item_content_obj = jQuery(this).find("div.mm-item-content");
// mm_item_content_obj.stop();
switch(options.hide_method) {
case "simple":
mm_item_content_obj.hide();
mm_item_link_obj.removeClass("mm-item-link-hover");
break;
case "slideUp":
mm_item_content_obj.slideUp('fast', function() {
mm_item_link_obj.removeClass("mm-item-link-hover");
});
break;
case "fadeOut":
mm_item_content_obj.fadeOut('fast', function() {
mm_item_link_obj.removeClass("mm-item-link-hover");
});
break;
default:
mm_item_content_obj.each(options.hide_method);
mm_item_link_obj.removeClass("mm-item-link-hover");
break;
}
if(mm_item_content_obj.length < 1) mm_item_link_obj.removeClass("mm-item-link-hover");
});
// Deactivation Method Ends
});
this.find(">li:last").after('<li class="clear-fix"></li>');
this.show();
};
$ mm_hide_timer:250和mm_hide_timeout:1000之間有什麼區別? – DDDD
'var $ mm_hide_timer = 0;'是一個變量,用於保存定時器的數字ID,可以通過[setTimeout()]啓動(https://developer.mozilla.org/en-US/docs/Web/ API/Window.setTimeout)。 'mm_hide_timeout'是插件的選項,它被用作setTimeout()的第二個參數,它隱藏菜單。在線** 18 **(添加一個選項),** 122 - 147 **(啓動一個定時器)看演示。 – n1k1ch
好吧,現在我注意到,如果我在菜單消失之前將鼠標懸停在菜單上,並將鼠標懸停在菜單上,菜單仍然會消失。如果我在它消失之前將鼠標懸停在它上面,是否有辦法阻止它隱藏? – DDDD