Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объекты и рекурсия в JS, Проблема с рекурсивным обращением в объе 
:(
    Опции темы
LordZeus
Дата 2.6.2009, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.5.2008

Репутация: нет
Всего: нет



Здравствуйте!
Не знаю на сколько сложна данная проблема, но пока решил разместить в разделе для новичков...

Суть такая есть задача: при наведении на DIV - запускается JS, который двигает и делает все более и более прозрачным картинку...как только картинка достигает правого конца div'а она начинает постепенно появляться и снова движется к своему месту. 

при выводе мышки из поля div - срабатывало прерывание setTimeoute, и запускался обратный прохода . Как только он достигал начала дива - он останавливался...

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

соответственно я подумал о том, что нужно создавать объект каждый раз, когда происходит наведение на менюшку и в самом объекте прописать уже сценарий прорисовки... но я ни как не могу понять как работает в объекте рекурсия, прерывания и т.д.

Код

var mmm = 0, mmm1=0, ii=0;

function Move(id1, show_hide1) 
  {
    this.id=id1;
    this.show_hide=show_hide1;
    
    this.go=function (ii)
       {
          
          ii++;
          alert(ii);
          if(ii<=34)
            {
            
              clearTimeout(mmm1);
              
              document.getElementById(this.id).style.opacity= 1-(ii*2.9/100);
              document.getElementById(this.id).style.left= ii*4;
              mmm = setTimeout("alert('qwe!')",40);
            }
        }
    this.go_back = function (ii)
        {
        
         ii--;
          if(ii>=0)
           {
           
             document.getElementById(this.id).style.opacity= 1-(ii*2.9/100);
             document.getElementById(this.id).style.left= ii*4;
             mmm1 = setTimeout(function() { this.go_back(ii) },40);
           }
        }
  }
//Move.go = 

 
function change_menu( id, show_hide ) 
{  
  var move= new Move(id, show_hide);

  if(show_hide == 1)
    {
      move.go(ii);
    }
  else
    {
      move.go_back(ii);
    }

}



в общем я предполагал, что это будет работать так:
при наведении и выведении курсора из меню происходит вызов функции change_menu где id -id менюхи, а show_hide - выведение или наведение курсора на меню

далее создаем объект move класса Move, в котором заранее прописаны 2-а метода: go и go_back. Если мы наводим - то запускается go... если выводим - запускается go_back... но мне никак не удается заставить это работать...  я предполагаю что проблема в рекурсивном обращении ... 

если у кого - нибуди есть мысли о том, что я делаю не так...очень прошу поделиться с начинающим программером на JS

Заранее спасибо =0)


Это сообщение отредактировал(а) Aliance - 2.6.2009, 13:19
PM MAIL   Вверх
vasac
Дата 2.6.2009, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 13
Всего: 36



это не раздел для новичков )
так прерывания всё-таки или рекурсия? smile
PM WWW   Вверх
Aliance
Дата 3.6.2009, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



В JS есть аналог pascal`евской goto, называемый меткой:
Код

my_label:
    //code goes here

if ( true )
    break my_label; // прерываем метку
else
    continue my_label; // переходим к метке


PM MAIL WWW ICQ Skype   Вверх
SelenIT
Дата 5.6.2009, 01:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



А не лучше ли завести один общий setInterval, по которому обегать массив анимируемых объектов и обновлять их состояние? С учетом флагов, выставляемых/сбрасываемых по событиям мышки...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
TetraHC
Дата 8.6.2009, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 8.6.2009

Репутация: нет
Всего: нет



Я не проверял, но уверен на 100%, что у тебя ошибка и ты переходишь в бесконечный цикл
PM MAIL   Вверх
Trunk
Дата 1.7.2009, 15:03 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 23.1.2009

Репутация: нет
Всего: нет



>>document.getElementById(this.id).style.opacity= 1-(ii*2.9/100);
В ИЕ работать не будет

А вообще подобного рода эффекты можно реализовать с помощью JQuery или scriptaculous и не заморачиваться
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0655 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.