Monday, June 3, 2024
61
rated 0 times [  65] [ 4]  / answers: 1 / hits: 24650  / 12 Years ago, wed, february 13, 2013, 12:00:00

Hi I'm a Javascript Newbie. I've programmed a script which auto types a phrase on a page, pauses for a while, clears the div, auto types the next phrase and so on. It should continuously loop.



I've found an issue when using a JavaScript wait() solution I found. When each phrase is in its pausing period, all other JavaScript is disabled on the page. I have researched and found that this is due to a blocking issue in JavaScript, as multi threads do not exist? Given my situation I have not been able to figure out a solution to allow the phrase to remain before being cleared, while also not resulting in blocking.



Below is my code. Any advice ?



var index = 0;
var phrases = new Array();

//add a new variable to the array to add new phrases
phrases[0] = Type the first phrase.;
phrases[1] = Type the second...;
phrases[2] = Type the third...;

var split_chars = phrases[index].split();

function type_phrases()
{
if(split_chars.length > 0) {
document.getElementById('matrix_typer').innerHTML += split_chars.shift();
}
else {
clearTimeout(loopTimer);
wait(10000);//add a delay before the next phrase is typed
document.getElementById('matrix_typer').innerHTML =  ;
index += 1;

if(index >= phrases.length)
{
index = 0;
}
split_chars = phrases[index].split();
}
loopTimer = setTimeout('type_phrases()',400);

}

function wait(ms) {
var start = +(new Date());
while (new Date() - start < ms);
}

More From » thread-sleep

 Answers
43

use two functions and add another timeout instead of your delay function



var phrases = new Array();

//add a new variable to the array to add new phrases
phrases[0] = Type the first phrase.;
phrases[1] = Type the second...;
phrases[2] = Type the third...;

var index = 0;
var split_chars = phrases[index].split();

function type_phrase()
{
document.getElementById('matrix_typer').innerHTML = &nbsp;;
split_chars = phrases[index].split();

return type_char();
}

function type_char()
{
if(split_chars.length > 0)
{
document.getElementById('matrix_typer').innerHTML += split_chars.shift();
}
else
{
clearTimeout(charloopTimer);
phraseloopTimer = setTimeout('type_phrases()',1000); //set a timeout instead of a delay
index += 1;
if(index >= matrix_phrases.length)
index = 0;
}
charloopTimer = setTimeout('type_char()',400);
}

[#80252] Tuesday, February 12, 2013, 12 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
carlymykalac

Total Points: 740
Total Questions: 91
Total Answers: 91

Location: Sudan
Member since Thu, May 7, 2020
4 Years ago
carlymykalac questions
Fri, Dec 10, 21, 00:00, 3 Years ago
Mon, Sep 2, 19, 00:00, 5 Years ago
;