Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] Пауза в JavaScript (http://forum.oszone.net/showthread.php?t=93462)

Coutty 04-11-2007 16:17 672492

Пауза в JavaScript
 
Как организовать паузу в скрипте на заданное количество миллисекунд?
Нужно повторять определённое действие (переместить объект), скажем, 20 раз в секунду. При этом в паузах желательно не тратить процессорное время.

XCodeR 04-11-2007 17:15 672534

поможет?

или:
Цитата:

function sleep(msec) {
var k = function_continuation;
setTimeout(function() { resume k <- mesc; }, msec);
suspend;
}

Coutty 04-11-2007 17:54 672560

По ссылке - работает, но съедает процессор на 100%, т.ч. не подходит.

Приведённый код не работает, но идею я понял: через msec миллисекунд должно восстанавливаться исполнение, остановленное строкой suspend;
Вот только suspend; не останавливает исполнение =\

Arrest 04-11-2007 18:42 672592

Код:

setTimeout("alert('hello')",1250);
http://www.sean.co.uk/a/webdesign/javascriptdelay.shtm

функция pause:
Код:

function pause(millis)
{
setTimeout(";", millis);
}

по-моему так (c)
; - такая операция в javascript вообще есть? :)

Coutty 04-11-2007 19:15 672622

Хм... Как-то я не могу связать.

Вот код:
HTML код:

<html>
<head>
<title>1</title>
<style>
body {font-size:0px;}
</style>
</head>
<body onLoad=mov();>
<div id="id1" style="background-color:red; top:100; left:100; position:absolute; width:2; height:2"></div>
<script>
<!--
function mov2() {
  var div = document.getElementById("id1");
  var temp = div.style.top.substr(0,3);
  div.style.top = temp++;
  }
 
function mov() {
  setTimeout("mov()",100);
  mov2();
  }
//-->

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

По идее функция mov() должна вызываться рекурсивно каждые 100 мс и с каждой итерацией вызывать mov2(), которая будет сдвигать красную точку на 1 пиксель вниз. Собственно, функция отрабатывает как раз через равные интервалы, но появилась новая проблема - в div.style.top каждый раз оказывается одно и то же значение =( Почему?(

Если же сделать функцию pause:
Цитата:

Цитата Arrest
function pause(millis)
{
setTimeout(";", millis);
} »

то цикл, перемещающий слой отрабатывает на максимальной скорости, а потом через заданный интервал срабатывает "пауза" =)

Arrest 04-11-2007 20:15 672654

а она точно отрабатывает? может
Код:

function mov() {
  mov2();
  setTimeout("mov()",100);
  }


Coutty 04-11-2007 20:55 672684

Arrest, точно отрабатывает в том порядке, как я написал. Ставил для отладки интервал 3000 и в mov2() дописывал alert(div.style.top);
Каждые 3 секунды выскакивает окошко с числом 101. Т.е. оно как бы изменяется, но потом загадочным образом возвращается в по-умолчательское положение.

Arrest 04-11-2007 22:17 672744

Coutty
HTML код:

<html>
<head>
<title>1</title>
<style>
body {font-size:0px;}
</style>
</head>
<body onLoad=mov();>
<div id="id1" style="background-color:red; top:100; left:100; position:absolute; width:2; height:2"></div>
<script>
<!--
var tp = parseInt(document.getElementById("id1").style.top.substr(0,3));

function mov2() {
  tp = tp+1;
  sync();
}

function sync(){
  document.getElementById("id1").style.top = tp+"px";
}
 
function mov() {
  setTimeout("mov()",1000);
  mov2();
  }
//-->

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

Opera 9.2, работает.

Sham 05-11-2007 00:30 672822

HTML код:

window.setInterval("alert('Есть такой метод!')", 1000); // забываем...

Coutty 05-11-2007 09:48 672905

Arrest, здорово, работает))) Надо было-то всего лишь глобальную переменную объявить)

Sham, setInterval тоже работает, но... как её остановить вовремя? Скажем, мне нужно только 100 итераций.
Писать что-то вроде:

Код:

var t = 100;
function temp1(){
  if (t>0)
    {
    mov2();
    t--;
    }
}

function mov() {
  window.setInterval("temp1()",1000);
}

Но она будет каждые 1000 мс отъедать кусочек процессорного времени. Или можно сделать какой-нибудь window.stopTimer?)

Хотя, думаю, что у неё просто другое предназначение.

Всем спасибо за помощь! Ня)

Sham 05-11-2007 19:14 673134

Coutty, rtfm
Код:

id = window.setInterval("alert('Есть такой метод!')", 1000); // поехали...
window.clearInterval(id); // тормоз...


Coutty 05-11-2007 20:10 673174

Sham, спасибо) У меня нет tfm, т.ч. я не могу его r


Время: 07:10.

Время: 07:10.
© OSzone.net 2001-