Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Затык с мини плагином меню (https://javascript.ru/forum/jquery/11748-zatyk-s-mini-plaginom-menyu.html)

arwprod 11.09.2010 17:02

Затык с мини плагином меню
 
Добрый день, уважаемые!
Сел разбираться с jquery и решил попробывать написать собственный плагин jquery.

Собственно, суть плагина простая, при наводке на элемент ul>li списка, раскраывается вложенный ul>li список, убираем мышку, этот список пропадает... Но вот затык: после того, как мы убрали курсор и пытаемся навести на этот же элемент снова, плагин не срабатывает.

Это мой первый опыт, по-этому не судите строго ^_^'
Код плагина:
(function($){ 
	var options = $.extend({
		fadeIn: 'slow',
		fadeOut: 'slow'
	},options);
	
	$.fn.extend({  
		jenvitMenu: function() {
			return this.each(function(){
				jQuery(this).find('ul')
					.css('display','none');
   				$(this).children().mouseover(function(){
					$(this).queue(function(){
    					$(this).children().fadeIn(options.fadeIn);
						$(this).dequeue();
					});
				}).mouseleave(function(){
					$(this).queue(function(){
						$(this).children().children().fadeOut(options.fadeOut);
					$(this).dequeue();
					});
    			});
			});
		}	
	}); 
})(jQuery);

html конструкция:
Код:

  <ul class="menu">
            <li>
            <a>1</a>
            <ul class="sub">
                    <li><a href="#"><b>1.1</b></a></li>
                <li><a href="#"><b>1.2</b></a></li>
                <li><a href="#"><b>1.3</b></a></li>
                <li><a href="#"><b>1.4</b></a></li>
                <li><a href="#"><b>1.5</b></a></li>
            </ul>
        </li>
    </ul>

Заранее спасибо за помощь.

arwprod 11.09.2010 17:32

кажется озарило... нужен какой-то триггер и в зависимости от него показывать либо скрывать элементы...

inGray 11.09.2010 17:48

Есть замечательная функция toggle().

arwprod 12.09.2010 00:46

Тугл на сколько я понял работает только при клике =\ а хотелось при наводке...

monolithed 12.09.2010 00:58

И для этого тоже есть замечательная функция hover()

inGray 12.09.2010 01:29

"Все уже украдено до нас" © Ю.Никулин

arwprod 12.09.2010 20:21

Получилась вот такая штука. Буду рад выслушать советы, заранее спасибо))

(function($){ 
	var options = $.extend({
		fadeIn: 'slow',
		fadeOut: 'fast'
	},options);
	
	$.fn.extend({  
		jenvitMenu: function(){
			jQuery(this).find('ul')
					.css('display','none');
			
			return this.each(function(){
   				$(this).children().hover(
					function(){
						self = $(this).children().eq(1);
						self.addClass('trigger');
						if(self.hasClass('trigger')) {
							self.fadeIn(options.fadeIn);
						}
					}, 
					function(){
						self.removeClass('trigger');
						if(!self.hasClass('trigger')) {
							self.fadeOut(options.fadeOut);						
						}
    				}
				);
				$(this).children().eq(1).each(function(){
					
				});
			});
		}	
	}); 
})(jQuery);

arwprod 12.09.2010 20:26

прошу прощения, не то скинул :Р
(function($){ 
	var options = $.extend({
		fadeIn: 'slow',
		fadeOut: 'fast'
	},options);
	
	$.fn.extend({  
		jenvitMenu: function(){
			$(this).find('ul')
					.css('display','none');
			
			return this.each(function(){
   				$(this).children().hover(
					function(){
						self = $(this).children().eq(1);
							self.fadeIn(options.fadeIn);
					}, 
					function(){
							self.fadeOut(options.fadeOut);
    				}
				);
			});
		}	
	}); 
})(jQuery);

arwprod 13.09.2010 20:01

Переписал скрипт, проверил в браузерах, не работает в IE и Opera =\ Есть ли какие-то хаки, как в css или еще что?))) Подскажите что делать, заранее спасибо.

(function($){ 
	var options = $.extend({
		fadeIn: 'slow',
		fadeOut: 'fast',
		triggerClass: 'some_ave_class_for_jenvit_menu'
	},options);
	
	$.fn.extend({  
		jenvitMenu: function(){
			
			$(this).find('ul').css('display','none');
			
			return this.each(function(){
   				$(this).find('li').hover(function(){
					self = $(this).children().next();
					if(!$(this).hasClass(options.triggerClass)){
						$(this).addClass(options.triggerClass);
						self.fadeIn();
					} else {
						self.css('display','block');
					}
						self.hover(function(){
							$(this).css('display','block');
						});
				},function(){
					$(this).removeClass(options.triggerClass);
					$(this).children().next().fadeOut();
    			});
			});			
		}	
	}); 
})(jQuery);


Часовой пояс GMT +3, время: 10:24.