1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
| 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();
}; |
Partager