Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Запуск функции с задержкой (https://javascript.ru/forum/misc/46181-zapusk-funkcii-s-zaderzhkojj.html)

Hapson 31.03.2014 19:53

Запуск функции с задержкой
 
:) Опять у меня проблемы с асинхронностью...
Вобщем есть функция, которая выводит на середину экрана анимацию ожидания.
В данном случае хотелось бы, чтобы было так:

1) я делаю ajax запрос
2) вызываю функцию вывода анимации
3) и хочу чтобы она вывела картинку не сразу, а через 500мс

Как работает setTimeout я понимаю. Например

function foo(){
    /***/
}

// ... before timeout
setTimeout(foo, 500);
// ... after timeout

Функция foo() будет вызвана как минимум через 500мс после установки таймаута. Но может быть пройдет больше времени, так как вызов функции foo() по любому будет вырван из потока и поставлен в очередь после выполнения всего скрипта.
То есть, если после установки таймаута, скрипт будет работать еще 1000мс, то по его завершении и будет вызвана foo().

И я так понимаю, нет способа вызвать функцию четко через определенное время?

Sweet 31.03.2014 20:03

Цитата:

Сообщение от Hapson
И я так понимаю, нет способа вызвать функцию четко через определенное время?

Правильно понимаешь. Есть один поток. И если он занят, то надо ждать, пока он освободится.

Hapson 31.03.2014 20:12

Цитата:

Сообщение от Sweet
Правильно понимаешь. Есть один поток. И если он занят, то надо ждать, пока он освободится.

Жаль... как же хреново что поток один.

Octane 31.03.2014 20:23

для длительных операций, чтобы не блокировать основной поток, придумали воркеры

nerv_ 31.03.2014 20:50

в большинстве CRUD приложений достаточно css-анимаций

angularjs + animatecss

Hapson 31.03.2014 20:52

Цитата:

Сообщение от Octane
для длительных операций, чтобы не блокировать основной поток, придумали воркеры

:blink: ??? Ху из ис воркеры?

Hapson 31.03.2014 20:56

Цитата:

Сообщение от nerv_
в большинстве CRUD приложений достаточно css-анимаций

Прикольно )))
У меня так получилось
$G.waitAnimated = (function(){

var waitAnimated = {},
	work = true,
	divID = "waiting_animated";

function start(){
	if(!work){return;}
	var WinH = document.documentElement.clientHeight;
	var WinW = document.documentElement.clientWidth;
	var div = document.createElement("DIV");
	var img = document.createElement("IMG");
	img.setAttribute("src", window.location.protocol +"//"+ window.location.hostname +"/media/global/images/wait_animated.gif");
	div.appendChild(img);
	div.style.position = "fixed";
	div.style.top = (WinH / 2 - div.offsetHeight / 2) +"px";
	div.style.left = (WinW / 2 - div.offsetWidth / 2) +"px";
	div.style.zIndex = "1000000";
	div.setAttribute("id", divID);
	document.body.appendChild(div);
}

waitAnimated.set = function(delay){
	typeof delay === "number" ? setTimeout(start, delay) : start();
},

waitAnimated.remove = function(){
	work = false;
	var image = document.getElementById(divID);
	if(image !== null){document.body.removeChild(image);}
}

return waitAnimated;

}());

Hapson 31.03.2014 21:20

Octane,
Про это говоришь?
http://www.xiper.net/learn/javascrip...b-workers.html

Octane 31.03.2014 23:02

да

Hapson 01.04.2014 18:58

Octane,
Классная вещь, эти воркеры)))
Жаль что старые ишаки опять все обгадили.
Не так давно написал я скрипт подсветки синтаксиса. Хорошо бы переделать его под воркер, так как на коде в 50000 символов браузер вешается. Но блин получается нужно все равно иметь две версии скрипта - с воркером и без.
Если бы IE 8-9 поддерживали воркеры, то на IE < 8 можно было бы забить, а так... хреново вобщем, как всегда...


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