Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблема с менюшкой

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Саныч
Отправлено: 31 Марта, 2011 - 19:08:15
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




Есть кнопка (а), по нажатию на которую открывается менюха (div), см. скрин
выкладываю js
CODE (javascript):
скопировать код в буфер обмена
  1. var sva_js = {
  2.         action_score: 4,
  3.         action_time: 3,
  4. };
  5. function actionTimeout(element)
  6. {
  7.         if(sva_js.action_time == 0) return false;
  8.         var ret = setTimeout(function()
  9.         {
  10.                 element.nextAll("div").hide(sva_js.action_score * 100);
  11.                 element.removeClass("active");
  12.         }, (sva_js.action_time * 1000));
  13.         return ret;
  14. }
  15. jQuery(document).ready(function($)
  16. {
  17.         $("ul.menu > li.action > div > a").click(function()
  18.         {
  19.                 var timeout;
  20.                 var el = $(this);
  21.                 if(el.nextAll("div").is(":visible"))
  22.                 {
  23.                         el.nextAll("div").hide(sva_js.action_score * 100);
  24.                         el.removeClass("active");
  25.                         clearTimeout(timeout);
  26.                 }
  27.                 else
  28.                 {
  29.                         $("ul.menu > li.action > div > div").hide(sva_js.action_score * 100);
  30.                         $("ul.menu > li.action > div > a").removeClass("active");
  31.                         el.nextAll("div").show(sva_js.action_score * 100,function(){ timeout = actionTimeout(el); });
  32.                         el.nextAll("div").mouseout(function(){ timeout = actionTimeout(el); });
  33.                         el.nextAll("div").mouseover(function(){ clearTimeout(timeout); });
  34.                         el.addClass("active");
  35.                 }
  36.                 return false;
  37.         });
  38. });

Что делает код:
1. по нажатию на одну из кнопок, прячем или открываем менюху, соответствующую этой кнопке... (другую менюху закрываем)
2. если в течении n-ого времени пользователь не навел курсор в поле менюхи - закрываем ее
3. если пользователь убрал курсор из менюхи и в течении n-ого времени не вернул его обратно - закрываем менюху...

Собсна проблема: бывают такие моменты, когда менюха открывается и сразу же сворачивается, или же остается открытой меньше того времени, что нужно... Вобщем где ошибка в коде, или возможно чего-то не хватает?
Прикреплено изображение (Нажмите для увеличения)
Без-имени-2.jpg


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
grefon
Отправлено: 31 Марта, 2011 - 19:58:53
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




В коде копаться лень. А вот по логике помочь могу, сам на такое напарывался. Проблема в том что функция еще не успела отсчитать энное количество времени как меню опять "задействовано". То есть принцип такой:
команда - открыть меню
команда - курсор ушел с поля, начался отсчет.
команда - курсор вернулся или команда - менюшка закрылась (но функция продолжает считать!)
команда - открыть меню (и тут функция досчитывает и закрывает меню)

Решать это можно всего лишь добавив одну глобальную переменную в скрипт и присваивать этой переменной значение 1 когда курсор в поле и 0 когда его нет. А на функцию нужно поставить условие что если сейчас переменная равна 1 то меню не закрывается.


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
JustUserR
Отправлено: 31 Марта, 2011 - 21:27:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Саныч пишет:
jQuery(document).ready(function($)
Использование предполагаемого варианта решения оригинальной задачи осуществляет достижение оригинальной цели, однако обеспечение включение целевого решения произвоидтся на основании определения ассоциированного потока действенных составляющих объектов в повышенном базовом уровне элементном уроне трактования, на основании которого производится снижение общего уровне производительности web-приложения, а также обеспечение включения требованиия деклирирования базовых инсталяционных предшествующих функциональных элементов для поддержки работоспособности jquery framework


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Саныч
Отправлено: 31 Марта, 2011 - 21:37:57
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




grefon, как раз таки мне понятно, почему так происходит. Одно не ясно, я ведь прописываю clearTimeout(timeout); по-идеи счетчик должен очиститься, но этого не происходит...
Пробовал сделать, как вы предложили, пока неудачно... решил завтра попробую с нуля опять написать, но уже сделаю упор именно на этот момент...

Может есть еще какие-то варианты?


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
JustUserR
Отправлено: 31 Марта, 2011 - 21:41:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Саныч пишет:
Может есть еще какие-то варианты?
В общем случае достижение целевого результата является возможным при осуществлении внедрения в целевое приложения предшествующих исполняемых функциональных объектов для организации управляющего эффекта, возможно фунционирования предполагаемой формы JS-приложении на основании осуществления передачи статических действенных составляющих элементов в координационные вложенные функции


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Саныч
Отправлено: 31 Марта, 2011 - 21:43:59
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




JustUserR Ха-ха Ха-ха Ха-ха Ха-ха Ха-ха ахринеть... Вы можете выражаться НОРМАЛЬНЫМ ЧЕЛОВЕЧЕСКИМ языком?!!


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Саныч
Отправлено: 02 Апреля, 2011 - 20:19:50
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




решил свою проблему, выкладую код, может кому-то поможет
CODE (javascript):
скопировать код в буфер обмена
  1. jQuery(document).ready(function($)
  2. {
  3.    var action_open, action_mouse;
  4.    $("ul.menu > li.action > div > a").click(function()
  5.    {
  6.       var el = $(this);
  7.       if(el.nextAll("div").is(":visible"))
  8.       {
  9.          el.nextAll("div").hide(500);
  10.          el.removeClass("active");
  11.          clearTimeout(action_open);
  12.          clearTimeout(action_mouse);
  13.       }
  14.       else
  15.       {
  16.          $("ul.menu > li.action > div > div").hide(500);
  17.          $("ul.menu > li.action > div > a").removeClass("active");
  18.          el.nextAll("div").show(500,function()
  19.          {
  20.             clearTimeout(action_open);
  21.             action_open = setTimeout(function()
  22.             {
  23.                el.nextAll("div").hide(500);
  24.                el.removeClass("active");
  25.                clearTimeout(action_open);
  26.                clearTimeout(action_mouse);
  27.             }, 3000);
  28.          })
  29.          .mouseout(function()
  30.          {
  31.             clearTimeout(action_mouse);
  32.             action_mouse = setTimeout(function()
  33.             {
  34.                el.nextAll("div").hide(500);
  35.                el.removeClass("active");
  36.                clearTimeout(action_open);
  37.                clearTimeout(action_mouse);
  38.             }, 3000);
  39.          })
  40.          .mouseover(function()
  41.          {
  42.             clearTimeout(action_open);
  43.             clearTimeout(action_mouse);
  44.          });
  45.          el.addClass("active");
  46.       }
  47.       return false;
  48.    });
  49. });

(Отредактировано автором: 02 Апреля, 2011 - 20:21:52)



-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
JustUserR
Отправлено: 02 Апреля, 2011 - 21:00:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Саныч пишет:
Решил свою проблему, выкладую код, может кому-то поможет
В действительности осуществление использование предполагаемого варианта решения оригинальной задачи, не обеспечивает достижение целевой вычислительной эффективности клиентского web-приложения на уровне первичного внешнего базового элементного уровня трактования, поскольку производится включение аспекта в виде осуществления внедрение транспортировочных действий для ассоциированных информационных полей, являющится внешней формой составляющих элементов для инициализации надстроенного потока исполнения


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB