Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 03.02.2009, 14:52
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

Ставь при вызове функции переменную, в неё записывай текущее время, при последующем вызове проверяй, есть ли переменная, если есть, от текущего времени отнимай то, что стоит в переменной. Получишь примерный интервал...
Ответить с цитированием
  #12 (permalink)  
Старый 03.02.2009, 14:54
...
Отправить личное сообщение для Zibba Посмотреть профиль Найти все сообщения от Zibba
 
Регистрация: 13.10.2008
Сообщений: 225

Этот промежуток будет 10 секунд =) или Вы имеете ввиду не начало выполнения функции а конец ее выполнения!? Заведите переменную и при помощи объекта Date присвойте текущщее время, после выполнения функции (в конце функции foo()) вставьте аналогичное определение текущего времени, разница между date1 и date2 и покажет вам время выполнения.

Дополнение: Уже ответили пока я писал

Последний раз редактировалось Zibba, 03.02.2009 в 14:56. Причина: Дополнил
Ответить с цитированием
  #13 (permalink)  
Старый 03.02.2009, 16:09
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

BAnder,
Кстати, на всякий случай, чтоб исключить возможность недопонимания: JavaScript - однопоточный язык, обработчики событий и "отложенные" функции выполняются, встраиваясь в общий поток в нужное время (по событию, либо по таймеру).
Ответить с цитированием
  #14 (permalink)  
Старый 03.02.2009, 17:31
Аспирант
Отправить личное сообщение для BAnder Посмотреть профиль Найти все сообщения от BAnder
 
Регистрация: 22.04.2008
Сообщений: 36

Всем спасибо за помощь, но раз такие дела...
Чувствую, что своими силами решить проблему не получится.
Значит так, есть div, при нажатие на который должна происходить анимация (для простоты пусть будет в одной оси из точки 20 в точку 300). Я это реализовываю через setTimeout. Проблема в том, что если после начала анимации нажать на кнопку еще раз, то ее скорость (анимации) пропорционально увеличивается. Вот это я и хотел предотвратить. Кто что может посоветовать по данной проблеме?
Ответить с цитированием
  #15 (permalink)  
Старый 03.02.2009, 17:39
...
Отправить личное сообщение для Zibba Посмотреть профиль Найти все сообщения от Zibba
 
Регистрация: 13.10.2008
Сообщений: 225

Используйте setInterval(); Либо завежите в самой функции флаг который будет показывать работает сейчас анимация или нет!? И соответственно отрабатывать тело функции еще раз или нет.
Ответить с цитированием
  #16 (permalink)  
Старый 03.02.2009, 17:45
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

если одна функция обрабатывает click, а вторая (animate) занимается анимацией, то в обработчике - проверять animate.isRunning и если false то запускать анимацию и animate.isRunning=true. А перед clearInterval - animate.isRunning=false
Ответить с цитированием
  #17 (permalink)  
Старый 03.02.2009, 17:53
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Тут в первую очередь нужно ответить на важный вопрос "А что должно происходить при нажатии на кнопку во время анимации?". Все почему-то забывают про эту деталь. Попробуйте быстро покликать по контролам на сайтах с анимацией, иногда забавные вещи творятся. Если ничего не должно происходить, то просто выставляйте кнопке disable на время анимации.
Ответить с цитированием
  #18 (permalink)  
Старый 03.02.2009, 18:30
Аспирант
Отправить личное сообщение для BAnder Посмотреть профиль Найти все сообщения от BAnder
 
Регистрация: 22.04.2008
Сообщений: 36

Я это делаю рекурсивной функцией, поэтому флаги и переменные не подходят...
А вот вариант Kolyaj, интересный, нужно опробовать

ЗЫ. у функции кроме анимации никакого предназначения нет.
Ответить с цитированием
  #19 (permalink)  
Старый 03.02.2009, 18:34
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Цитата:
Я это делаю рекурсивной функцией, поэтому флаги и переменные не подходят...
а рекурсия тут при чем? Она тут не нужна имхо
но disable'ить в любом случае стоит, просто если это не кнопка, то избежать проверки в обработчике не получится
Ответить с цитированием
  #20 (permalink)  
Старый 03.02.2009, 18:44
Аспирант
Отправить личное сообщение для BAnder Посмотреть профиль Найти все сообщения от BAnder
 
Регистрация: 22.04.2008
Сообщений: 36

x-yuri,
ну если конечная координата не соответствует, то мы с определенным интервалом (setTimeout) запускаем текущую функцию перемещения блока.
Или я в чем-то не прав?
x-yuri,
вариант с isRunning - я так понимаю (помня пост Андрей Параничев-а об однопоточности) эта фича работает только внутри функции?
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паралельное выполнение одной и той-же функции Сеня AJAX и COMET 3 24.01.2009 20:59
Как проверить существование функции Aderba Общие вопросы Javascript 2 14.11.2008 16:09
владелец функции diagnost Общие вопросы Javascript 6 30.10.2008 15:04
Последовательное выполнение кода avtor01 AJAX и COMET 6 29.10.2008 19:06
Авто выполнение функции Itachi Общие вопросы Javascript 18 03.10.2008 16:48