Показать полную графическую версию : [решено] Пауза в JavaScript
Как организовать паузу в скрипте на заданное количество миллисекунд?
Нужно повторять определённое действие (переместить объект), скажем, 20 раз в секунду. При этом в паузах желательно не тратить процессорное время.
поможет? (http://snippets.dzone.com/posts/show/2253)
или:
function sleep(msec) {
var k = function_continuation;
setTimeout(function() { resume k <- mesc; }, msec);
suspend;
}
По ссылке - работает, но съедает процессор на 100%, т.ч. не подходит.
Приведённый код не работает, но идею я понял: через msec миллисекунд должно восстанавливаться исполнение, остановленное строкой suspend;
Вот только suspend; не останавливает исполнение =\
setTimeout("alert('hello')",1250);
http://www.sean.co.uk/a/webdesign/javascriptdelay.shtm
функция pause:
function pause(millis)
{
setTimeout(";", millis);
}
по-моему так (c)
; - такая операция в javascript вообще есть? :)
Хм... Как-то я не могу связать.
Вот код:
<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:function pause(millis)
{
setTimeout(";", millis);
} »
то цикл, перемещающий слой отрабатывает на максимальной скорости, а потом через заданный интервал срабатывает "пауза" =)
а она точно отрабатывает? может
function mov() {
mov2();
setTimeout("mov()",100);
}
Arrest, точно отрабатывает в том порядке, как я написал. Ставил для отладки интервал 3000 и в mov2() дописывал alert(div.style.top);
Каждые 3 секунды выскакивает окошко с числом 101. Т.е. оно как бы изменяется, но потом загадочным образом возвращается в по-умолчательское положение.
Coutty
<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, работает.
window.setInterval("alert('Есть такой метод!')", 1000); // забываем...
Arrest, здорово, работает))) Надо было-то всего лишь глобальную переменную объявить)
Sham, setInterval тоже работает, но... как её остановить вовремя? Скажем, мне нужно только 100 итераций.
Писать что-то вроде:
var t = 100;
function temp1(){
if (t>0)
{
mov2();
t--;
}
}
function mov() {
window.setInterval("temp1()",1000);
}
Но она будет каждые 1000 мс отъедать кусочек процессорного времени. Или можно сделать какой-нибудь window.stopTimer?)
Хотя, думаю, что у неё просто другое предназначение.
Всем спасибо за помощь! Ня)
Coutty, rtfm
id = window.setInterval("alert('Есть такой метод!')", 1000); // поехали...
window.clearInterval(id); // тормоз...
Sham, спасибо) У меня нет tfm, т.ч. я не могу его r =Р
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.