[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выполнение функций по очереди
Гость_Вьетнамский лётчик
Добрый день, уважаемые. Вероятно вы хотите знать по какому вопросу я созвал вас всех тут. И так, что мы имеем:

- 2 функции которые надо выполнить поочередно, а именно так, чтобы работа второй не начиналась до того момента пока первая полностью не завершит своё выполнение
- эти функции не должны знать о друг друге (то есть никаких условий внутри вроде "следующим вызываем blabla2()", из blabla1() соответственно…)
- фактически мне нужен модифицируемый лист задач, в котором задачи не могут выполняться одновременно как им вздумается

Говоря об очередях и листе, я нарыл про массив вкупе с .push/.shift итд, наивно по неопытности полагая, что достаточно лишь вбить в массив список функций, а там оно отсортируется с временными промежутками само. Я набросал быдлокод и все мои изначальные подозрения таки сбылись — может всё и по порядку, но работают функции опять же одновременно:

<html>
<head>
<title>
blah</title>
</head>
<body>
<a
href="downloadFile.zip" id="download" class="button">Download the file...</a>
<a
href="downloadFile.zip" id="download2" class="button">Download the file...</a>
<script
language="javascript">
var
downloadButton = document.getElementById("download");
var downloadButton2 = document.getElementById("download2");

var counter = 10;
var counter2 = 10;

var newElement = document.createElement("p");
var newElement2 = document.createElement("p");

newElement.innerHTML = "You can download the file in 10 seconds.";
newElement2.innerHTML = "You can download the file in 10 seconds.";

//var id;

downloadButton.parentNode.replaceChild(newElement, downloadButton);
downloadButton2.parentNode.replaceChild(newElement2, downloadButton2);

//имитация бурной деятельности
var zoxo = function zoxo() {
id = setInterval(
function() {
counter--;
if(counter < 0) {
newElement.parentNode.replaceChild(downloadButton, newElement);
clearInterval(id);
} else {
newElement.innerHTML = "You can download the file in " + counter.toString() + " seconds.";
}
}

, 1000);
}

//имитация бурной деятельности
var zoxo2 = function zoxo2() {
id2 = setInterval(
function() {
counter2--;
if(counter2 < 0) {
newElement2.parentNode.replaceChild(downloadButton2, newElement2);
clearInterval(id2);
} else {
newElement2.innerHTML = "You can download the file in " + counter2.toString() + " seconds.";
}
}

, 1000);
}


var funqueue = [];
funqueue.push(zoxo);
funqueue.push(zoxo2);

// Remove and execute all items in the array
/**/

while (funqueue.length > 0) {
(funqueue.shift())();
}
/**/


</script>
</body>
</html>



Чтобы понять меня лучше, можно глянуть на очереди в том же jQuery. Если создать продолжительную анимацию (медленную для наглядности) блока в одну сторону (к примеру по onclick, влево), а потом нажать на кнопку, функция которой наоборот тянет блок в другую сторону(вправо), то видно, что первая анимация не прервётся, а завершит свою работу до конца, но при этом и второй клик останется в памяти, который в последующем вызовет (поставит на очередь) вторую функцию, выполняющую анимацию блока вправо…
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.