Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Как организовать задержку


Автор: aleksaxxx 7.6.2005, 16:45
Нужно, чтобы скрипт выполнял такую задачу: на экран выводиться картинка (картинка нарисована на PHP). Генериться случайное число, и через это случаное число секунд картинка меняеться. Нужно, чтобы юзер за минимальное время после изменения картинки кликнул на ней. Если у юзера сдадут нервы и он кликнет до того как картинка изменится, выводиться гневная надпись и т.д. и т.п. Такой себе тест на скорость. Пробовала использавоть setTimeout для организации задержки ьперед изменением картинки, но при его использовании картинка почему то меняеться сразу. Я использую такую функцию для задержки

Код

function pause (mSec) {
    clock = new Date();
    justMinute = clock.getTime();
    while (true) {
    just = new Date();
    if ((just.getTime() - justMinute > mSec) ) break;
    }
}

Но мне нужно отслеживать если юзер кликнул мышкой до того как картинка поменялась.
Весь скрипт

Код

<html>
<head>
<title>Документ без имени</title>
<meta http-equiv="Тип-содержимое" content="text/html; charset=iso-8859-1">
<meta http-equiv="Тип-содержимое" content="text/html; charset=iso-8859-1">
</head>

<script language="javascript">
var c=0,t1=0,t2=0/*время включения лампы и клика юзера*/,l=0/*состояние лампы*/,r=0/*случайное число*/;


function getrandom(){
r=Math.round(Math.random()*10,-1);
if (r<6)r=r+3; else r=r-3;
return r;
}

function vremya(){
var time=new Date();
t=time.getTime();
return t;
}

function lampa()/*Лампа включается*/{
    document.pict.src='white.php'
    l=1;
    t1=vremya(); // Время включения лампы
//    clearTimeout();
}


function starts()/*Перед началом игры*/{
    document.out.results.value=document.out.results.value+'\n\n';    
    l=0;
    document.out.results.value=document.out.results.value+'r='+r+'\n';    
    t1=0;t2=0;
}

function pause (mSec) {
    clock = new Date();
    justMinute = clock.getTime();
    while (true) {
    just = new Date();
    if ((just.getTime() - justMinute > mSec) ) break;
    }
} 

function clicks()/*юзер кликает при включении лампы*/{
if (l==0){    document.out.results.value=document.out.results.value+'Фальстарт\n';}else if(l==1){
    t2=vremya();
    document.out.results.value=document.out.results.value+'t2='+t2+'\nt1='+t1+'\n';
    var t=t2-t1;
    document.out.results.value=document.out.results.value+'Разница времени = '+t*0.001+'\n';    
    }
    document.out.results.value=document.out.results.value+"Кликните мышкой, чтобы начать, а потом кликните мышкой сразу же после включения лампы."+'\n';    
    document.pict.src="grey.php";
}



function najat()/*Обработка клика мышки на странице*/
{
if (c==0)/*До старта или после клика юзера при загорании лампы*/{
    c=1;
    document.out.results.value=document.out.results.value+'c='+c+'\n';    
    starts();        
    r=getrandom()*1000;
    pause®; 
    //setTimeout(lampa(),3000);
} else


if (c==1)/*Сразу после загорания лампы*/{
    c=0;
    document.out.results.value=document.out.results.value+'c='+c+'\n';    
    clicks();
}
}
</script>





<body bgcolor="#000000">
<font color='#FF0000' face="Times New Roman, Times, serif" size="+1">

<form name="out">
<input type=text name="info" size=70 value="Кликните мышкой, чтобы начать."><p>
<textarea name="results" rows=20 cols=70></textarea><p>
</form>

<img src="grey.php" alt="Image, created by PHP"  name="pict"  onClick="najat()">


<p>
Игруха


</body>



</html>

Как можно решить эту проблему?


 ! 
 

Пользуйся подствекой форума!

Автор: Aliance 7.6.2005, 22:42
Модератор: Название темы должно отражать ее суть!

Автор: Guest 13.6.2005, 11:45
А конструктивные предложения касательно вопроса есть?

Автор: Ciber SLasH 13.6.2005, 13:41
Делай через setInterval().
Например:
Код

timer = setInterval(MyFunc, 10)  // повторяем отрисовку каждые 10 мс
function MyFunc() {
  if (<условие, после которого нужно закончить повторение функции>) {
    clearInterval(timer);  // снимаем таймер

    // какие-нить твои действия

    return
  }
}

Автор: Aliance 13.6.2005, 17:34
Ciber SLasH
Разве в первой строчке не нужно круглые скобки?
И не забывай ставить точки с запятой после каждой законченной инструкции, это полезная привычка =)

Автор: Sardar 18.6.2005, 21:41
Цитата(Aliance @ 13.6.2005, 16:34)
Разве в первой строчке не нужно круглые скобки?

Нет не нужны.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)