Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Определить выполнение функции (https://javascript.ru/forum/events/2714-opredelit-vypolnenie-funkcii.html)

ZoNT 03.02.2009 14:52

Ставь при вызове функции переменную, в неё записывай текущее время, при последующем вызове проверяй, есть ли переменная, если есть, от текущего времени отнимай то, что стоит в переменной. Получишь примерный интервал...

Zibba 03.02.2009 14:54

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

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

Андрей Параничев 03.02.2009 16:09

BAnder,
Кстати, на всякий случай, чтоб исключить возможность недопонимания: JavaScript - однопоточный язык, обработчики событий и "отложенные" функции выполняются, встраиваясь в общий поток в нужное время (по событию, либо по таймеру).

BAnder 03.02.2009 17:31

Всем спасибо за помощь, но раз такие дела...
Чувствую, что своими силами решить проблему не получится.
Значит так, есть div, при нажатие на который должна происходить анимация (для простоты пусть будет в одной оси из точки 20 в точку 300). Я это реализовываю через setTimeout. Проблема в том, что если после начала анимации нажать на кнопку еще раз, то ее скорость (анимации) пропорционально увеличивается. Вот это я и хотел предотвратить. Кто что может посоветовать по данной проблеме?

Zibba 03.02.2009 17:39

Используйте setInterval(); Либо завежите в самой функции флаг который будет показывать работает сейчас анимация или нет!? И соответственно отрабатывать тело функции еще раз или нет.

x-yuri 03.02.2009 17:45

если одна функция обрабатывает click, а вторая (animate) занимается анимацией, то в обработчике - проверять animate.isRunning и если false то запускать анимацию и animate.isRunning=true. А перед clearInterval - animate.isRunning=false

Kolyaj 03.02.2009 17:53

Тут в первую очередь нужно ответить на важный вопрос "А что должно происходить при нажатии на кнопку во время анимации?". Все почему-то забывают про эту деталь. Попробуйте быстро покликать по контролам на сайтах с анимацией, иногда забавные вещи творятся. Если ничего не должно происходить, то просто выставляйте кнопке disable на время анимации.

BAnder 03.02.2009 18:30

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

ЗЫ. у функции кроме анимации никакого предназначения нет.

x-yuri 03.02.2009 18:34

Цитата:

Я это делаю рекурсивной функцией, поэтому флаги и переменные не подходят...
а рекурсия тут при чем? Она тут не нужна имхо
но disable'ить в любом случае стоит, просто если это не кнопка, то избежать проверки в обработчике не получится

BAnder 03.02.2009 18:44

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


Часовой пояс GMT +3, время: 12:41.