Patrik81Medlem sedan okt. 2001537 inlägg
Hejsan :)
Innan jag säger mer så vill jag säga att jag har sökt på webforum, att jag har hittat lite matnyttigt, men inte lyckats pilla ihop det till något för mig användbart.
Här är koden jag lyckats koda ihop (som tyvärr inte gör mer än att hänga webbläsaren när den körs) :(
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>litet test</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript">
window.onload = function()
{
bool = true;
rand = 10;
num_punkter = 1;
now = new Date();
soon = new Date();
soon.setSeconds( soon.getSeconds + rand );
while ( bool == true )
{
num_punkter++;
setTimeout("add_dot(num_punkter)", 1000);
if ( num_punkter > 6 ) {
num_punkter = 1;
}
if ( soon.getSeconds() > now.getSeconds() ) {
bool = false;
}
}
}
function add_dot( num )
{
var str = "";
for ( i=0; i < num; i++ )
{
str = str + ".";
}
document.getElementById("dots").innerHTML = str;
}
</script>
</head>
<body>
<div id="content">
Lite text<span id="dots">.</span>
</div>
</body>
</html>
Det jag vill göra (har inte försökt göra allt det i denna koden) är att:
Efter en random tidsperiod ändra all text inom <div id="content"> och </div> dvs även <span id="dots">.</pan> till något annat. (detta har jag inte ens försökt mig på än)
Och under tiden fram tills denna random tidsperiod runnit ut, skulle jag vilja att antalet punkter inom <span id="dots"> och </span> ökades, upp till 7, varpå de omedelbart ändrades till en punkt, och räknaren på nytt startade att öka på punkter upp till 7 igen.
Och dessa punkter skulle då tillkomma en per sekund.
Några förslag?
MVH Patrik
GuffaMedlem sedan juni 2004533 inlägg
Inte så konstigt att den hänger sig... Det som händer när du kör koden är att den går runt i loopen och anropar setTimeout en väldig massa gånger. Ingen av dessa kommer dock att utföras förrän du avslutar loopen.
Du jämför sekunderna i variablerna soon och now för att kolla om loopen ska avslutas, men eftersom värderna i varken soon eller now någonsin förändras, så kommer loopen aldrig att avslutas.
Resultatet är alltså att koden kommer att fortsätta att anropa setTimeout tills minnet är fullt av timeout-event som väntar på att få köras. :x
Du kan bara köra ett javascript i taget, du kan alltså inte ha en loop som ligger och väntar på något och använda setTimeout för att anropa annan kod.
Ett Date-objekt fylls bara med aktuell tid när du skapar det, innehållet uppdateras sedan inte automatiskt men aktuell tid. För att få aktuell tid så får du alltså skapa ett nytt Date-objekt.
Patrik81Medlem sedan okt. 2001537 inlägg
Hejsan :)
Det var en helt korrekt observation, och nej, det var ju inte alls konstigt då :)
Nu har jag suttit här och nött ned tangentbordet i mina försök att få det att fungera tillfredsställande, men har samtidigt även kommit till insikt med att det inte var helt viktigt med att punkterna skulle försvinna och öka igen, så tog bort den biten av specen, och landade då med denna kod, som fungerar :)
window.onLoad = function()
{
do_onload();
}
function changeText(strText) {
var content = document.getElementById("content");
var current_str = content.innerHTML;
document.getElementById("content").innerHTML = current_str + '<br />\n' + strText;
}
function do_onload()
{
for ( i=0; i < 50; i++ )
{
setTimeout( 'add_dot()', 1500 );
}
var str = "annan text";
setTimeout('changeText(\'' + str + '\')', 3000);
}
function add_dot()
{
var dots = document.getElementById("dots");
var existing_str = dots.innerHTML;
document.getElementById("dots").innerHTML = existing_str + ".";
}
Jag tackar för uppmärksamheten.
MVH Patrik
GuffaMedlem sedan juni 2004533 inlägg
Om jag förstår koden rätt så kommer den efter 1,5 sekunder att lägga på 50 stycken punkter, och efter 3 sekunder ändra texten i content.
Det du är ute efter löser du nog bäst med setInterval istället. Använd den för att köra add_dot med jämna mellanrum, och använd clearInterval för att sedan slå av den ifrån changeText.
window.onLoad = function()
{
do_onload();
}
kan du skriva:
window.onLoad = do_onload;
och
function add_dot()
{
var dots = document.getElementById("dots");
var existing_str = dots.innerHTML;
document.getElementById("dots").innerHTML = existing_str + ".";
}
kan du skriva:
function add_dot()
{
document.getElementById("dots").innerHTML += ".";
}
Patrik81Medlem sedan okt. 2001537 inlägg
Hejhej :)
Får kolla lite närmare på det där då :)
Känns som att jag inte har någon som helst bra koll på javascript...
Tack så mycket :)
MVH Patrik