Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.11.2012, 14:31
Кандидат Javascript-наук
Отправить личное сообщение для jeysmook Посмотреть профиль Найти все сообщения от jeysmook
 
Регистрация: 24.04.2012
Сообщений: 118

Функция работает со второго раза
В этой функции hover выполняется со второго раза, а мне нужно чтобы сразу выполнялся. То есть я захожу на сайт и навожу на меню, функция стразу выполняется, а у меня она выполняется со второго раза. Почему? Спасибо.
$(document).ready(function(){
	$.fn.dynamicMenu = function(options){
		options = $.extend({
			speed: 200,
			reset: 1000,
		}, options);
		var menu = $(this);
		var firstItem = $('.firsItem', menu);
		$('<div class="hover"></div>').css({
			width: firstItem.outerWidth(),
			height: firstItem.outerHeight(),
			left: firstItem.position().left,
			top: firstItem.position().top,
		}).appendTo(this);
		hover = $('.hover', menu);
		$('div:not(.hover)', menu).hover(function(){
			clearTimeout(reset);
			hover.animate({
				width: $(this).outerWidth(),
				left: $(this).position().left,
			},{
				duration : options.speed,
				queue : false,
			});
		},function(){
				reset = setTimeout(function(){
					hover.animate({
						width: firstItem.outerWidth(),
						left: firstItem.position().left,
					}, options.speed);
				}, options.reset)
		});		
	};
	$('.menu').dynamicMenu();
});

CSS
.hover{
	display:block;
	position:absolute; padding:5px; margin:-6px 0 0 -6px; z-index:0;
	background:url(../../body/bg/hover.png); border:1px solid #24368B; color:#fff;
	border-radius:5px; -moz-border-radius:5px; -webkit-border-radius:5px;
	box-shadow:0 0 2px #000; -moz-box-shadow:0 0 2px #000; -webkit-box-shadow:0 0 2px #000;
}

HTML
<div class="menu">
       <div class="firsItem"><a href="/">Главная</a></div>
       <div><a href="/">Фотографии</a></div>
       <div><a href="/">Рассказ</a></div>
</div>

Последний раз редактировалось jeysmook, 06.11.2012 в 15:05.
Ответить с цитированием
  #2 (permalink)  
Старый 07.11.2012, 01:43
Аватар для cmd
cmd cmd вне форума
Профессор
Отправить личное сообщение для cmd Посмотреть профиль Найти все сообщения от cmd
 
Регистрация: 19.03.2011
Сообщений: 177

Первый раз вижу такой селектор
$('<div class="hover"></div>').css({

Почему не
$('div.hover').css({
__________________
Cogito, ergo sum
Ответить с цитированием
  #3 (permalink)  
Старый 07.11.2012, 02:21
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

Вы вешаете hover тогда когда пройзойдет наведение на один div, тоесть пока на див не навели событие на .hover не повесится. Поэтому вешайте это событие в другом месте независимо от событий других дивов.

Сообщение от cmd
Первый раз вижу такой селектор
Это создание элемента.
$('<div class="hover"></div>').css({
            width: firstItem.outerWidth(),
            height: firstItem.outerHeight(),
            left: firstItem.position().left,
            top: firstItem.position().top,
        })*!*.appendTo(this);*/!*
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #4 (permalink)  
Старый 07.11.2012, 09:23
Кандидат Javascript-наук
Отправить личное сообщение для jeysmook Посмотреть профиль Найти все сообщения от jeysmook
 
Регистрация: 24.04.2012
Сообщений: 118

cmd, потому, что я не выбираю элементы, а создаю его. Когда пишем li.hover, ничего не создается.
walik,
cmd,
Спасибо все за ответы, но я уже нашел ошибку, там нужно было объявить переменную reset до события hover, потому, что :
$('div:not(.hover)', menu).hover(function(){
			clearTimeout(reset); // событие с переменной reset (а ее у нас она не создана когда наводим первый раз)
			hover.animate({
				width: $(this).outerWidth(),
				left: $(this).position().left,
			},{
				duration : options.speed,
				queue : false,
			});
		}

Последний раз редактировалось jeysmook, 07.11.2012 в 09:30.
Ответить с цитированием
  #5 (permalink)  
Старый 07.11.2012, 09:32
Кандидат Javascript-наук
Отправить личное сообщение для jeysmook Посмотреть профиль Найти все сообщения от jeysmook
 
Регистрация: 24.04.2012
Сообщений: 118

Может кому интересно будет, вот полный, работающий код:
$(function(){
		$.fn.dynamicNav = function(options){
			options = $.extend({
				speed: 500,
				reset: 1000,
				queue: false,
			}, options);
			var nav = $(this);
			var firstItem = $('.firstItem', nav);
			var reset;
			$('<li class="hover"></li>').css({
				width: firstItem.outerWidth(),
				height: firstItem.outerHeight(),
				left: firstItem.position().left,
				top: firstItem.position().top,
			}).appendTo(this);
			var hover = $('.hover', nav);
			$('li:not(.hover)', nav).hover(function(){
				clearTimeout(reset);
				hover.animate({
					width: $(this).outerWidth(),
					left: $(this).position().left,
				},{
					duration: options.speed,
					queue: options.queue,
				});
			}, function(){
				reset = setTimeout(function(){
					hover.animate({
						width: firstItem.outerWidth(),
						left: firstItem.position().left,
					}, options.speed)
				}, options.reset);
			});			
		}
		$('.mainNav').dynamicNav();
	});
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните, почему функция работает именно так. Имя Общие вопросы Javascript 36 04.09.2012 17:30
функция внутри Live() срабатывает после второго клика Ad1r jQuery 7 09.08.2011 14:11
не работает умножение IE allenn Internet Explorer 1 14.02.2011 19:47
НЕ работает функция length Golovastik Серверные языки и технологии 4 14.02.2011 17:31
Не работает функция инфоокна tomAlba Общие вопросы Javascript 0 30.01.2011 00:54