Ставь при вызове функции переменную, в неё записывай текущее время, при последующем вызове проверяй, есть ли переменная, если есть, от текущего времени отнимай то, что стоит в переменной. Получишь примерный интервал...
|
Этот промежуток будет 10 секунд =) или Вы имеете ввиду не начало выполнения функции а конец ее выполнения!? Заведите переменную и при помощи объекта Date присвойте текущщее время, после выполнения функции (в конце функции foo()) вставьте аналогичное определение текущего времени, разница между date1 и date2 и покажет вам время выполнения.
Дополнение: Уже ответили :) пока я писал |
BAnder,
Кстати, на всякий случай, чтоб исключить возможность недопонимания: JavaScript - однопоточный язык, обработчики событий и "отложенные" функции выполняются, встраиваясь в общий поток в нужное время (по событию, либо по таймеру). |
Всем спасибо за помощь, но раз такие дела...
Чувствую, что своими силами решить проблему не получится. Значит так, есть div, при нажатие на который должна происходить анимация (для простоты пусть будет в одной оси из точки 20 в точку 300). Я это реализовываю через setTimeout. Проблема в том, что если после начала анимации нажать на кнопку еще раз, то ее скорость (анимации) пропорционально увеличивается. Вот это я и хотел предотвратить. Кто что может посоветовать по данной проблеме? |
Используйте setInterval(); Либо завежите в самой функции флаг который будет показывать работает сейчас анимация или нет!? И соответственно отрабатывать тело функции еще раз или нет.
|
если одна функция обрабатывает click, а вторая (animate) занимается анимацией, то в обработчике - проверять animate.isRunning и если false то запускать анимацию и animate.isRunning=true. А перед clearInterval - animate.isRunning=false
|
Тут в первую очередь нужно ответить на важный вопрос "А что должно происходить при нажатии на кнопку во время анимации?". Все почему-то забывают про эту деталь. Попробуйте быстро покликать по контролам на сайтах с анимацией, иногда забавные вещи творятся. Если ничего не должно происходить, то просто выставляйте кнопке disable на время анимации.
|
Я это делаю рекурсивной функцией, поэтому флаги и переменные не подходят...
А вот вариант Kolyaj, интересный, нужно опробовать ЗЫ. у функции кроме анимации никакого предназначения нет. |
Цитата:
но disable'ить в любом случае стоит, просто если это не кнопка, то избежать проверки в обработчике не получится |
x-yuri,
ну если конечная координата не соответствует, то мы с определенным интервалом (setTimeout) запускаем текущую функцию перемещения блока. Или я в чем-то не прав? x-yuri, вариант с isRunning - я так понимаю (помня пост Андрей Параничев-а об однопоточности) эта фича работает только внутри функции? |
Часовой пояс GMT +3, время: 12:41. |