Mega菜单JavaScript在deactivate_action上创建延迟



我正在使用jquery megamenu版本2,来自www.geektantra.com,http://www.geektantra.com/2010/2010/05/jquery-megamenu-2/jquery-megamenu-2/

我试图在鼠标不悬停菜单时设置超时。因此,当您的鼠标在菜单中时,一旦将鼠标从菜单上移开,它就会关闭菜单。我希望它等待三秒钟,然后消失。

选项中的mm_timeout无需做任何事情。activate_actionoptions.mm_timeout = 0;旨在延迟菜单的负载,但deactivate_action没有任何内容。slideUp方法可以更改为慢,但仅等待一秒钟。我是新来的,谢谢你

这是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_timeout: 250并在该隐藏菜单时使用它($mm_hide_timer变量也应添加到插件中):

$mm_hide_timer = setTimeout(function(){
    //...hiding functionality
}, options.mm_hide_timeout);

以这种方式激活插件:

$(".megamenu").megamenu({mm_hide_timeout: 1000});

这是完整的 demo

相关内容

  • 没有找到相关文章

最新更新