PageSourceSearch

https://seethroughny.net/themes/stny-v2/js/megamenu.js

js seethroughny.net collected 2026-10-04 00:24:59 UTC 14,633 bytes, 437 lines download raw bytes

1// Item Name : Mega Menu Reloaded
2// Item URI : http://codecanyon.net/item/mega-menu-reloaded/1593152
3// Author URI : http://codecanyon.net/user/Pixelworkshop/
4// Version : 2.0
5
6
7
8(function ($) {
9
10
11
12    var settings = {
13		menu_speed_show : 300, // Time (in milliseconds) to show a drop down
14		menu_speed_hide : 200, // Time (in milliseconds) to hide a drop down
15		menu_speed_delay : 200, // Time (in milliseconds) before showing a drop down
16		menu_effect : 'open_close_slide', // Drop down effect, choose between 'hover_fade', 'hover_slide', 'click_fade', 'click_slide', 'open_close_fade', 'open_close_slide'
17		menu_easing : 'jswing', // Easing Effect : 'easeInQuad', 'easeInElastic', etc.
18		menu_click_outside : 0, // Clicks outside the drop down close it (1 = true, 0 = false)
19		menu_show_onload : 0, // Drop down to show on page load (type the number of the drop down, 0 for none)
20		menubar_trigger : 0, // Show the menu trigger (button to show / hide the menu bar), only for the fixed version of the menu (1 = show, 0 = hide)
21		menubar_hide : 0, // Hides the menu bar on load (1 = hide, 0 = show)
22        menu_responsive : 1, // Enables mobile-specific script
23        menu_carousel : 0, // Enable / disable carousel
24        menu_carousel_groups : 0, // Number of groups of elements in the carousel
25        hoverIntentConfig:{ // HoverIntent Configuration
26            sensitivity:2, // number = sensitivity threshold (must be 1 or higher)
27            interval:100, // number = milliseconds for onMouseOver polling interval
28            over:megaMenuOver, // function = onMouseOver callback (REQUIRED)
29            timeout:200, // number = milliseconds delay before onMouseOut
30            out:megaMenuOut // function = onMouseOut callback (REQUIRED)
31        }
32    };
33
34
35    var methods = {
36        
37
38        init:function (options) {
39
40
41            settings = $.extend(1, settings, options);
42
43
44            return this.each(function () {
45
46
47				var	megaMenu = $(this),
48					menuItem = $(megaMenu).children('li'),
49					menuItemSpan = $(menuItem).children('span'),
50					menuDropDown = $(menuItem).children('.megamenu_fullwidth');
51					menuDropDownScroller = $('.megamenu_scroller_container');
52                    menuButton = $('.megamenu_button');
53
54                if(options.menu_carousel === 1){
55                    megaMenuCarousel();
56                }
57				if(options.menu_click_outside === 1){
58					megaMenuClickOutside();
59				}
60				if ((menuDropDownScroller.length > 0)) {
61					$(menuDropDownScroller).nanoScroller({alwaysVisible: true});                    
62	            }   
63				
64				$(menuDropDown).css('left', '0').hide();
65                
66                // hack
67                megaMenuDropDownShift();
68
69                megaMenuTabs();
70
71
72                // Mobile Devices
73
74                if (("ontouchstart" in document.documentElement) && (settings.menu_responsive === 1)) {
75
76
77                    if ($(window).width() < 768) {
78                        $(menuDropDown).css({'left':'0', 'top':'auto'}).hide();
79                        $(menuItem).hide(0);
80                        $(menuButton).show(0);
81                        $(menuButton).children('span').hammer().on('tap', function () {
82                            $(menuButton).toggleClass('megamenu_button_active')
83                            $(menuItem).not(":eq(0)").toggle(0);
84                        });
85                    }
86
87                    $(menuItem).toggleClass('noactive');
88
89                    $(menuItem).children('span').hammer().on('tap', function () {
90                        
91                        var $this = $(this);
92                        $this.parent(menuItem).toggleClass('active noactive')
93                            .find(menuDropDown).toggle(0).end()
94                            .siblings().addClass('noactive').removeClass('active')
95                            .find(menuDropDown).hide(0);
96                        return false;
97                        
98                    });
99
100                    $(document).hammer().on('tap', function () {
101                        $(menuItem).addClass('noactive');
102                        $(menuDropDown).hide(0);
103                    });
104                    $(megaMenu).hammer().on('tap', function (event) {
105                        event.stopPropagation();
106                    });
107                    $(window).bind('orientationchange', function () {
108                        $(menuItem).addClass('noactive');
109                        $(menuDropDown).hide(0);
110                    });
111
112                    return;
113
114
115                } 
116
117
118                // Desktop Computers
119
120                else {
121
122
123                    megaMenuDropDownPosition();
124
125                    $(window).resize(function() {
126                        megaMenuDropDownPosition();
127                    });
128
129                    $(menuButton).click(function () {
130                        $(menuButton).toggleClass('megamenu_button_active');
131                        $(menuItem).not(":eq(0)").toggle(0);
132                    });
133
134    				if( options.menubar_trigger === 1 ) {
135    					megamenuBarHide = options.menubar_hide;
136    					megaMenuTrigger();
137    				}
138
139                    switch (settings.menu_effect) {
140
141                        case 'open_close_fade':
142                        var menuEffectShow = 'fadeToggle',
143                            menuEffectHide = 'fadeOut';
144                        break;
145                        case 'open_close_slide':
146                        var menuEffectShow = 'slideToggle',
147                            menuEffectHide = 'slideUp';
148                        break;
149                        case 'open_close_toggle':
150                        var menuEffectShow = 'toggle',
151                            menuEffectHide = 'hide';
152                        break;
153
154                    }
155                        
156                    switch (settings.menu_effect) {
157
158                        case 'hover_fade':
159                        case 'hover_slide':
160                        case 'hover_toggle':
161                        case 'click_fade':
162                        case 'click_slide':
163                        case 'click_toggle':
164                            $(menuItem).hoverIntent(settings.hoverIntentConfig);
165                        break;
166
167                        case 'open_close_fade':
168                        case 'open_close_slide':
169                        case 'open_close_toggle':
170
171                            $('.megamenu > li:nth-child(' + settings.menu_show_onload + ')')
172                                .find(menuDropDown).show()
173                                .closest(menuItem).toggleClass('active');
174
175                            $(menuItem).unbind('mouseenter mouseleave').click(function () {
176
177                                var $this = $(this);
178                                $this.siblings().removeClass('active')
179                                    .find(menuDropDown)[menuEffectHide](settings.menu_speed_hide);
180                                $this.toggleClass('active')
181                                    .find(menuDropDown).first()
182                                    .delay(settings.menu_speed_delay)[menuEffectShow](settings.menu_speed_show)
183                                    .click(function (event) {
184                                        event.stopPropagation();
185                                    });
186
187                            });
188
189                        break;
190                    
191                    }
192
193
194                }
195
196
197            }); // End each
198
199        },
200
201        update:function (options) {
202            settings = $.extend(1, settings, options);
203        }
204
205    };
206
207
208
209	$.fn.megaMenuReloaded = function (method) {
210
211
212        if (methods[method]) {
213            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
214        } else if (typeof method === 'object' || !method) {
215            return methods.init.apply(this, arguments);
216        } else {
217            $.error('No found method ' + method);
218        }
219
220
221    };
222
223    /** shift dropdowns left to keep on page **/
224    function megaMenuDropDownShift() {
225        $('.megamenu_fullwidth[megamenuleft]').each(function(){
226            $(this).css('left',$(this).attr('megamenuleft')+'px');
227        })
228    }
229
230
231    function megaMenuDropDownPosition() {
232
233        if (($(window).width() < 768) && (settings.menu_responsive === 1)) {
234            $('.megamenu').children('li').css({'display':'none'});
235            $('.megamenu_button').css({'display':'block'});
236        }
237
238        else {
239            $('.megamenu').children('li').css({'display':'inline'});
240            $('.megamenu_button').css({'display':'none'});
241        }
242
243    }
244
245
246    function megaMenuOver() {
247
248        var $this = $(this),
249            dropDown = $('.megamenu_fullwidth',this);
250        
251        switch (settings.menu_effect) {
252            case 'hover_fade':
253                $(dropDown).fadeIn(settings.menu_speed_show);
254            break;
255            case 'hover_slide':
256                $(dropDown).slideDown(settings.menu_speed_show);
257            break;
258            case 'hover_toggle':
259                $(dropDown).show(settings.menu_speed_show);
260            break;
261            case 'click_fade':
262                $this.click(function () {
263                    $(dropDown).fadeIn(settings.menu_speed_show);
264                });
265            break;
266            case 'click_slide':
267                $this.click(function () {
268                    $(dropDown).slideDown(settings.menu_speed_show);
269                });
270            break;
271            case 'click_toggle':
272                $this.click(function () {
273                    $(dropDown).show(settings.menu_speed_show);
274                });
275            break;
276
277        }
278
279    }
280
281
282    function megaMenuOut() {
283    
284        var $this = $(this),
285            dropDown = $('.megamenu_fullwidth',this);
286
287        switch (settings.menu_effect) {
288            case 'hover_fade':
289            case 'click_fade':
290                $(dropDown).fadeOut(settings.menu_speed_hide);
291            break;
292            case 'hover_slide':
293            case 'click_slide':
294                $(dropDown).slideUp(settings.menu_speed_hide);
295            break;
296            case 'hover_toggle':
297            case 'click_toggle':
298                $(dropDown).toggle(settings.menu_speed_hide);
299            break;
300
301        }
302
303    }
304	
305	
306	function megaMenuTrigger(){
307		
308		var megaMenuBar = $('.megamenu_fixed');
309		
310		$(megaMenuBar).after('<a id="megamenu_trigger" href="#"></a>');
311		
312		if( megamenuBarHide === 1 ) {
313			$(megaMenuBar).hide(0);
314			$('#megamenu_trigger').toggleClass("active");
315		}
316		
317		$('#megamenu_trigger').click(function() {
318			$(megaMenuBar).slideToggle(300);
319			$(this).toggleClass("active");
320			return false;
321		});
322		
323	}
324	
325	
326	function megaMenuClickOutside(){
327		
328		$(document).click(function(){
329			$('.megamenu').children('li').removeClass('active');
330			$('.megamenu_fullwidth').hide(0);
331		});
332		
333		$('.megamenu').click(function(event){
334			event.stopPropagation();
335		});
336		
337	}
338    
339    
340    /**
341     * Simple Carousel
342     * Copyright (c) 2010 Tobias Zeising, http://www.aditu.de
343     * Licensed under the MIT license
344     * 
345     * http://code.google.com/p/simple-carousel/
346     * Version 0.3
347     */
348    function megaMenuCarousel(){
349        
350        var megaMenu = $('.megamenu');
351
352        $(megaMenu).append('<span class="megamenu_carousel_prev"></span><span class="megamenu_carousel_next"></span>');
353
354        var defaults = {
355            width:$('.megamenu_wrapper').width(),
356            visible:1,
357            next: $('.megamenu_carousel_next'),
358            prev: $('.megamenu_carousel_prev'),
359            current: 0,
360            items: 2,
361            slidespeed: 600
362        };
363        var width = defaults.width;
364        
365        $(megaMenu).wrap('<div class="megamenu_carousel_frame"></div>');
366        
367        var container = $(megaMenu).parent('.megamenu_carousel_frame');
368
369        var slide = function(dir, click) {
370        
371            if(dir=="next") {
372                defaults.current += defaults.visible;
373                if(defaults.current>=defaults.items)
374                    defaults.current = 0;
375            } else if(dir=="prev") {
376                defaults.current -= defaults.visible;
377                if(defaults.current<0)
378                    defaults.current = (defaults.visible==1) ? defaults.items-1 : defaults.items-defaults.visible+(defaults.visible-(defaults.items%defaults.visible));
379            } else {
380                defaults.current = dir;
381            }
382            
383            $(megaMenu).animate( {marginLeft: -1.0*defaults.current*defaults.width}, defaults.slidespeed );
384            
385        }
386            
387        if(defaults.next!=false)
388            defaults.next.click(function() {
389                slide('next',true);
390            });
391            
392        if(defaults.prev!=false)
393            defaults.prev.click(function() {
394                slide('prev',true);
395            });        
396
397    }
398    
399    
400    function megaMenuTabs(){
401        
402        $('.megamenu_tabs').each(function(index, value) { 
403                
404            var menuTabs = $(this);
405                menuTabsNav = menuTabs.find(".megamenu_tabs_nav > li > a");
406
407            menuTabsNav.click(function() {
408            
409                var menuTabsLinkCurrent = menuTabs.find("a.current").attr("href").substring(1),
410                    $menuTabsLink = $(this),
411                    menuTabsLinkID = $menuTabsLink.attr("href").substring(1);
412
413                if ((menuTabsLinkID != menuTabsLinkCurrent) && ( menuTabs.find(":animated").length == 0)) {
414                                        
415                    menuTabs.find(".megamenu_tabs_nav li a").removeClass("current");
416                    $menuTabsLink.addClass("current");
417
418                    menuTabs.find("#"+menuTabsLinkCurrent).fadeOut(300, function() {
419
420                        menuTabs.find("#"+menuTabsLinkID).fadeIn(300);
421                        var newHeight = menuTabs.find("#"+menuTabsLinkID).height();
422
423                    });
424                    
425                }   
426                
427                return false;
428                
429            });
430
431        }); 
432        
433    }
434
435
436
437})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.