Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.06.2010, 19:32
Аватар для Vulkan
Профессор
Отправить личное сообщение для Vulkan Посмотреть профиль Найти все сообщения от Vulkan
 
Регистрация: 25.05.2010
Сообщений: 511

Переменная портит меню
Здравствуйте, написал простенькое меню, вот код:
JS:
var t,t2;
function show_menu(name)
{ 
    var objectm = document.getElementById(name+'-menu');
    var width = parseInt(objectm.style.width);
    var opacity = parseFloat(objectm.style.opacity);
	if(width <= 200) {
			clearTimeout(t2); 
                                  width += 2;
			objectm.style.width = width;
			if(opacity <= 0.9) {
			opacity += 0.01; 
                                  objectm.style.opacity = opacity;
			}
    t = setTimeout(arguments.callee,5);
			}
}


function hide_menu(name)
{ 
    var objectm = document.getElementById(name+'-menu');
    var width = parseInt(objectm.style.width);
    var opacity = parseFloat(objectm.style.opacity);
      if(width >= 0) {
	clearTimeout(t);
	width -= 2;
	objectm.style.width = width;
	  if(opacity >= 0) {
		opacity -= 0.01; 
                       objectm.style.opacity = opacity;
			}
    t2 = setTimeout(arguments.callee,5);
			}
}

HTML:
<div class="home" onmouseover="show_menu('main')" onmouseout="hide_menu('main')"></div>
<ul id="main-menu" onmouseover="show_menu('main')" onmouseout="hide_menu('main')" style="opacity:0; width: 0;" class="sub_helper_list">
<li>Главная</li>
</ul>

Проблема заключается в том что когда в том что когда в getElementById прописываешь id объекста полностью например 'main-menu' всё работает на ура, а как только прописываешь name+'-menu', работает но если когда работает норм то меню появляется по таймауту, то здесь когда наводишь мышью объект увеличивает на 2 пикселя ширину и 0.01 непрозрачность... То есть когда прописываешь id целиков всё идёт по таймауту, а когда с переменной то таймаут почеу-то не катит. Помогите пожалуйста, уже два часа не могу понять в чём дело...

Последний раз редактировалось Vulkan, 11.06.2010 в 19:37.
Ответить с цитированием
  #2 (permalink)  
Старый 11.06.2010, 20:30
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Vulkan
t = setTimeout(arguments.callee,5);
Вот тут параметр name в функцию уже не передастся.
Ответить с цитированием
  #3 (permalink)  
Старый 11.06.2010, 20:34
Аватар для Vulkan
Профессор
Отправить личное сообщение для Vulkan Посмотреть профиль Найти все сообщения от Vulkan
 
Регистрация: 25.05.2010
Сообщений: 511

хм.. Даже об этом не думал... а каким образом тогда можно передать?
Ответить с цитированием
  #4 (permalink)  
Старый 11.06.2010, 20:37
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Ну я обычно делаю что-то вроде этого
function showMenu(name, callback) {
    var el = document.getElementById(name);
    // Ещё всякая инициализация
    (function() {
        if (/* Ещё продолжаем анимацию? */) {
            // Двигаем объект
            setTimeout(arguments.callee, 10);
        } else {
            // Закончили упражнение
            callback();
        }
    })();
}
Ответить с цитированием
  #5 (permalink)  
Старый 11.06.2010, 20:46
Аватар для Vulkan
Профессор
Отправить личное сообщение для Vulkan Посмотреть профиль Найти все сообщения от Vulkan
 
Регистрация: 25.05.2010
Сообщений: 511

Не совсем понятно, а что в выше описанном Вами примере представляет из себя функция callback()?
Ответить с цитированием
  #6 (permalink)  
Старый 11.06.2010, 20:48
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Функция вызываемая по окончании анимации
// Показываем меню
showMenu(name, function() {
    alert('Показали');
})
Ответить с цитированием
  #7 (permalink)  
Старый 11.06.2010, 20:55
Аватар для Vulkan
Профессор
Отправить личное сообщение для Vulkan Посмотреть профиль Найти все сообщения от Vulkan
 
Регистрация: 25.05.2010
Сообщений: 511

Извиняюсь если торможу (уже 13 часов за компом), но зачем мне это, мне же нужно передать переменную name, если callback нужен, то распишите пожалуйста поподробнее...
Ответить с цитированием
  #8 (permalink)  
Старый 11.06.2010, 20:59
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Это я вам на будущее сразу Щас может не надо, но потом обязательно понадобится. Как правило в любую асинхронную функцию передаётся callback, вызываемый по окончании её работы.
Ответить с цитированием
  #9 (permalink)  
Старый 11.06.2010, 21:02
Аватар для Vulkan
Профессор
Отправить личное сообщение для Vulkan Посмотреть профиль Найти все сообщения от Vulkan
 
Регистрация: 25.05.2010
Сообщений: 511

Сообщение от Kolyaj Посмотреть сообщение
Это я вам на будущее сразу Щас может не надо, но потом обязательно понадобится. Как правило в любую асинхронную функцию передаётся callback, вызываемый по окончании её работы.
Понятно, спасибо, но возвращаясь к главному - ну так вы не в курсе как передать переменную использую arguments?
Ответить с цитированием
  #10 (permalink)  
Старый 11.06.2010, 21:26
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Я вам написал, как лучше сделать.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу jQuery плагин для создания меню Zeboton jQuery 9 15.09.2014 15:31
анимированное меню на jquery глючит в ie leCadavreExquis jQuery 3 30.12.2009 17:30
Как "переключать" картинки в меню навигации? KirTer Элементы интерфейса 1 22.06.2009 11:49
Событие mouseout при наведении мыши на пункт меню WalterScott Events/DOM/Window 2 12.05.2009 22:05
Ссылка под слоем перекрывает слой Devider Общие вопросы Javascript 7 24.02.2009 23:18