wp/wp-content/themes/IN-MOTION-package-u1/in-motion/js/jquery.iconmenu.js
author ymh <ymh.work@gmail.com>
Tue, 15 Dec 2020 13:49:49 +0100
changeset 16 a86126ab1dd4
parent 0 d970ebf37754
permissions -rwxr-xr-x
update enmi-conf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
(function($) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
	
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
	var methods = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
			init 	: function( options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
				
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
				if( this.length ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
					
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
					var settings = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
						// configuration for the mouseenter event
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
						animMouseenter		: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
							'mText' : {speed : 350, easing : 'easeOutExpo', delay : 140, dir : 1},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
							'sText' : {speed : 350, easing : 'easeOutExpo', delay : 0, dir : 1},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
							'icon'  : {speed : 350, easing : 'easeOutExpo', delay : 280, dir : 1}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
						},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
						// configuration for the mouseleave event
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
						animMouseleave		: {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
							'mText' : {speed : 300, easing : 'easeInExpo', delay : 140, dir : 1},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
							'sText' : {speed : 300, easing : 'easeInExpo', delay : 280, dir : 1},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
							'icon'  : {speed : 300, easing : 'easeInExpo', delay : 0, dir : 1}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
						},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
						// speed for the item bg color animation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
						boxAnimSpeed		: 300,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
						// default text color (same defined in the css)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
						defaultTextColor	: '#3a3939',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
						defaultCircleHoverColor	: '#383938',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
						// default bg color (same defined in the css)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
						defaultBgColor		: '#fff'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
					};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
					
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
					return this.each(function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
						
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
						// if options exist, lets merge them with our default settings
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
						if ( options ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
							$.extend( settings, options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
						
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
						var $el 			= $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
							// the menu items
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
							$menuItems		= $el.children('li'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
							// save max delay time for mouseleave anim parameters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
						maxdelay	= Math.max( settings.animMouseleave['mText'].speed + settings.animMouseleave['mText'].delay ,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
												settings.animMouseleave['sText'].speed + settings.animMouseleave['sText'].delay ,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
												settings.animMouseleave['icon'].speed + settings.animMouseleave['icon'].delay
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
											  ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
							// timeout for the mouseenter event
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
							// lets us move the mouse quickly over the items,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
							// without triggering the mouseenter event
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
							t_mouseenter;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
						
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
						// save default top values for the moving elements:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
						// the elements that animate inside each menu item
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
						$menuItems.find('.sti-item').each(function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
							var $el	= $(this);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
							$el.data('deftop', $el.position().top);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
						});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
						
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
						// ************** Events *************
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
						// mouseenter event for each menu item
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
						$menuItems.bind('mouseenter', function(e) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
							
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
							clearTimeout(t_mouseenter);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
							
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
							var $item		= $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
								$wrapper	= $item.children('a'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
								wrapper_h	= $wrapper.height(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
								// the elements that animate inside this menu item
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
								$movingItems= $wrapper.find('.sti-item'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
								// the color that the texts will have on hover
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
								hovercolor	= $item.data('hovercolor');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
							
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
							t_mouseenter	= setTimeout(function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
								// indicates the item is on hover state
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
								$item.addClass('sti-current');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
								
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
								$movingItems.each(function(i) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
									var $item			= $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
										item_sti_type	= $item.data('type'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
										speed			= settings.animMouseenter[item_sti_type].speed,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
										easing			= settings.animMouseenter[item_sti_type].easing,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
										delay			= settings.animMouseenter[item_sti_type].delay,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
										dir				= settings.animMouseenter[item_sti_type].dir,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
										// if dir is 1 the item moves downwards
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
										// if -1 then upwards
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
										style			= {'top' : -dir * wrapper_h + 'px'};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
									
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
									if( item_sti_type === 'icon' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
										// this sets another bg image for the icon
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
										style.backgroundPosition	= 'bottom left';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
									} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
										style.color					= hovercolor;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
									// we hide the icon, move it up or down, and then show it
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
									$item.hide().css(style).show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
									clearTimeout($item.data('time_anim'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
									$item.data('time_anim',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
										setTimeout(function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
											// now animate each item to its default tops
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
											// each item will animate with a delay specified in the options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
											$item.stop(true)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
												 .animate({top : $item.data('deftop') + 'px'}, speed, easing);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
										}, delay)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
									);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
								});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
								// animate the bg color of the item
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
								$wrapper.stop(true).animate({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
									backgroundColor: settings.defaultCircleHoverColor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
								}, settings.boxAnimSpeed );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
							
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
							}, 100);	
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
						})
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
						// mouseleave event for each menu item
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
						.bind('mouseleave', function(e) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
							
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
							clearTimeout(t_mouseenter);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
							
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
							var $item		= $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
								$wrapper	= $item.children('a'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
								wrapper_h	= $wrapper.height(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
								$movingItems= $wrapper.find('.sti-item');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
							
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
							if(!$item.hasClass('sti-current')) 
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
								return false;		
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
							
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
							$item.removeClass('sti-current');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
							
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
							$movingItems.each(function(i) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
								var $item			= $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
									item_sti_type	= $item.data('type'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
									speed			= settings.animMouseleave[item_sti_type].speed,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
									easing			= settings.animMouseleave[item_sti_type].easing,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
									delay			= settings.animMouseleave[item_sti_type].delay,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
									dir				= settings.animMouseleave[item_sti_type].dir;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
								
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
								clearTimeout($item.data('time_anim'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
								
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
								setTimeout(function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
									
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
									$item.stop(true).animate({'top' : -dir * wrapper_h + 'px'}, speed, easing, function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
										
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
										if( delay + speed === maxdelay ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
											
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
											$wrapper.stop(true).animate({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
												backgroundColor: settings.defaultBgColor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
											}, settings.boxAnimSpeed );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
											
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
											$movingItems.each(function(i) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
												var $el				= $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
													style			= {'top' : $el.data('deftop') + 'px'};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
												
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
												if( $el.data('type') === 'icon' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
													style.backgroundPosition	= 'top left';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
												} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
													style.color					= settings.defaultTextColor;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
												}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
												
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
												$el.hide().css(style).show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
											});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
											
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
										}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
									});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
								}, delay);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
							});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
						});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
						
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
		};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
	
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
	$.fn.iconmenu = function(method) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
		if ( methods[method] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
			return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
		} else if ( typeof method === 'object' || ! method ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
			return methods.init.apply( this, arguments );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
			$.error( 'Method ' +  method + ' does not exist on jQuery.iconmenu' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
	};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
	
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
})(jQuery);