03.02.2009, 14:52
|
Флудер
|
|
Регистрация: 25.07.2008
Сообщений: 1,271
|
|
Ставь при вызове функции переменную, в неё записывай текущее время, при последующем вызове проверяй, есть ли переменная, если есть, от текущего времени отнимай то, что стоит в переменной. Получишь примерный интервал...
|
|
03.02.2009, 14:54
|
...
|
|
Регистрация: 13.10.2008
Сообщений: 225
|
|
Этот промежуток будет 10 секунд =) или Вы имеете ввиду не начало выполнения функции а конец ее выполнения!? Заведите переменную и при помощи объекта Date присвойте текущщее время, после выполнения функции (в конце функции foo()) вставьте аналогичное определение текущего времени, разница между date1 и date2 и покажет вам время выполнения.
Дополнение: Уже ответили пока я писал
Последний раз редактировалось Zibba, 03.02.2009 в 14:56.
Причина: Дополнил
|
|
03.02.2009, 16:09
|
|
|
Регистрация: 21.02.2008
Сообщений: 1,250
|
|
BAnder,
Кстати, на всякий случай, чтоб исключить возможность недопонимания: JavaScript - однопоточный язык, обработчики событий и "отложенные" функции выполняются, встраиваясь в общий поток в нужное время (по событию, либо по таймеру).
|
|
03.02.2009, 17:31
|
Аспирант
|
|
Регистрация: 22.04.2008
Сообщений: 36
|
|
Всем спасибо за помощь, но раз такие дела...
Чувствую, что своими силами решить проблему не получится.
Значит так, есть div, при нажатие на который должна происходить анимация (для простоты пусть будет в одной оси из точки 20 в точку 300). Я это реализовываю через setTimeout. Проблема в том, что если после начала анимации нажать на кнопку еще раз, то ее скорость (анимации) пропорционально увеличивается. Вот это я и хотел предотвратить. Кто что может посоветовать по данной проблеме?
|
|
03.02.2009, 17:39
|
...
|
|
Регистрация: 13.10.2008
Сообщений: 225
|
|
Используйте setInterval(); Либо завежите в самой функции флаг который будет показывать работает сейчас анимация или нет!? И соответственно отрабатывать тело функции еще раз или нет.
|
|
03.02.2009, 17:45
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
если одна функция обрабатывает click, а вторая (animate) занимается анимацией, то в обработчике - проверять animate.isRunning и если false то запускать анимацию и animate.isRunning=true. А перед clearInterval - animate.isRunning=false
|
|
03.02.2009, 17:53
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Тут в первую очередь нужно ответить на важный вопрос "А что должно происходить при нажатии на кнопку во время анимации?". Все почему-то забывают про эту деталь. Попробуйте быстро покликать по контролам на сайтах с анимацией, иногда забавные вещи творятся. Если ничего не должно происходить, то просто выставляйте кнопке disable на время анимации.
|
|
03.02.2009, 18:30
|
Аспирант
|
|
Регистрация: 22.04.2008
Сообщений: 36
|
|
Я это делаю рекурсивной функцией, поэтому флаги и переменные не подходят...
А вот вариант Kolyaj, интересный, нужно опробовать
ЗЫ. у функции кроме анимации никакого предназначения нет.
|
|
03.02.2009, 18:34
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Цитата:
|
Я это делаю рекурсивной функцией, поэтому флаги и переменные не подходят...
|
а рекурсия тут при чем? Она тут не нужна имхо
но disable'ить в любом случае стоит, просто если это не кнопка, то избежать проверки в обработчике не получится
|
|
03.02.2009, 18:44
|
Аспирант
|
|
Регистрация: 22.04.2008
Сообщений: 36
|
|
x-yuri,
ну если конечная координата не соответствует, то мы с определенным интервалом (setTimeout) запускаем текущую функцию перемещения блока.
Или я в чем-то не прав?
x-yuri,
вариант с isRunning - я так понимаю (помня пост Андрей Параничев-а об однопоточности) эта фича работает только внутри функции?
|
|
|
|