Volledige versie bekijken : timer
eagle
%Europe/Berlin %753 %2005, 19:05
ik had een ideetje voor me'n site: nl een soort admin-proclamation, deze korte quote wordt via php in flash geladen. Nu wil ik erg toch wat grafische animatie bijvoegen en ik dacht aan elke afzonderlijke letter om de 0.1 s te laten verschijnen; dus:
na 0.1 s: h
na 0.2 s: ha
na 0.3 s: hal
na 0.4 s: hall
na 0.5 s: hallo
Ik dacht aan een timer, dit blijkt niet echt fantastisch te werken, enige ideeen?
Roenes
%Europe/Berlin %770 %2005, 19:29
setInterval() is hier geschikt voor. Hou er alleen rekening mee dat als je je effect wilt uitvoeren in de tijd dat jij aangeeft (halve sec) dan zul je waarschijnlijk het effect niet waarnemen omdat het te snel wordt uitgevoerd. Dus misschien moet je de tijd wat langer maken :)
Dauntless
%Europe/Berlin %781 %2005, 19:45
this.createTextField("mijnText", 1, 0, 0, 100, 20);
var txt = "Dauntless";
var myInt = setInterval(addLetter, 500);
var id:Number = 0;
function addLetter(){
mijnText.text += txt.charAt(id);
if(id == txt.length) clearInterval(myInt);
else id++;
}
Je kan de interval tijd veranderen en zo... Maar gebruik deze code alleen als je weet hoe ze in elkaar zit! Aan gewoon copy pasten zonder nadenken heb je niets! :)
eagle
%Europe/Berlin %855 %2005, 21:31
Bedankt, maar ik had een groot deel van je script reeds zelf bedacht, ik had het wel met split method gedaan (iets omslachtiger) en dan heb ik je charAt gebruikt.
Helaas is er nog 1 probleem, het werkt wel met een gegenereerd textfield maar niet met een textfield dat al op de scene staat, hoe komt dit/los ik dit op?
var letterString:String = "Hallo hoe stel je het beste makker?";
var letterIndex:Number = 0;
var newsInterval = setInterval(addLetter, 200);
function addLetter() {
_root.myTxtField.text += letterString.charAt(letterIndex);
if (letterIndex == letterString.length) {
clearInterval(newsInterval);
} else {
letterIndex++;
}
}
Dauntless
%Europe/Berlin %867 %2005, 21:48
Gewoon door de juiste instance naam in de code te zetten (het rode: )
var txt = "Dauntless";
var myInt = setInterval(addLetter, 500);
var id:Number = 0;
function addLetter(){
mijnText.text += txt.charAt(id);
if(id == txt.length) clearInterval(myInt);
else id++;
}
Ps: Je moet wel altijd werken met de instance naam van je textvak, en niet de var naam:
http://www.dauntless.be/flashfocus/pics/instancenaam.jpg. Laat de var naam leeg :).
eagle
%Europe/Berlin %880 %2005, 22:07
lol, er stond myTextField ipv myTxtField, toch bedankt *leraar* Dauntless ;)
Dauntless
%Europe/Berlin %885 %2005, 22:15
lol, er stond myTextField ipv myTxtField, toch bedankt *leraar* Dauntless ;)
You're welcome :)
eagle
%Europe/Berlin %432 %2005, 11:22
Het werkt nu, ik heb wel wat aanpassingen gedaan om het werkende te krijgen tegelijkertijd voor meerdere texfields, immers, dezelfde functie aanroepen met een setInterval veroorzaakt het dooreenlopen van chars. De code is nogal omslachtig geworden, vandaar mijn vraag of dit ook korter kan:
function addLetter(doel:Array, str:Array, self:String) {
for (i=0; i<doel.length; i++) {
temp[i] += str[i].charAt(letterIndex[i]);
eval(doel[i]).text = temp[i]+"_";
if (letterIndex[i] == str[i].length) {
eval(doel[i]).text = temp[i];
stopcmd[i] = 1;
for (a=0; a<doel.length; a++) {
total += Number(stopcmd[a]);
if (total == doel.length) {
clearInterval(eval(self));
} else {
total = 0;
}
}
} else {
letterIndex[i]++;
}
}
}
letterIndex = new Array(0, 0, 0);
temp = new Array("", "", "");
doelFld = new Array("myTxtField1", "myTxtField2", "myTxtField3");
doelTxt = new Array("Hallo", "Mphmph", "Iepiep");
var newsInterval = setInterval(addLetter, 50, doelFld, doelTxt, "newsInterval");
Dauntless
%Europe/Berlin %440 %2005, 11:33
Zo zou ik het doen:
this.createTextField("mijnText1", 1, 0, 0, 100, 20);
this.createTextField("mijnText2", 2, 0, 40, 100, 20);
this.createTextField("mijnText3", 3, 0, 80, 100, 20);
var txtArray:Array = new Array(mijnText1, mijnText2, mijnText3);
var wordArray:Array = new Array("Hallo", "daar", "flashfocus");
var myInt = setInterval(addLetter, 500, txtArray, wordArray);
var id:Number = 0;
function addLetter(txtfields:Array, words:Array){
var done:Boolean = true;
for(var i in txtfields){
if(id < words[i].length){
txtfields[i].text += words[i].charAt(id);
done = false;
}
}
if(done) clearInterval(myInt);
id ++;
}
Veel verschil zit er waarschijnlijk niet in...
eagle
%Europe/Berlin %448 %2005, 11:46
toch toch, het is korter dan de mijne, 1 kleine verduidelijking:
for(var i in txtfields)
is dit hetzelfde als
for(i=0; i<txtfields.length)
en zonder de i++, want die zet je vanonder?
Dauntless
%Europe/Berlin %456 %2005, 11:56
de i en de id zijn aparte vars . De i dient om te weten waar je in we words en txtfields arrays zit, de id dient om te zien in welke letter van elk element van de arrays je ziet.
for(var i in myArray)
is hetzelfde als
for(var i = myArray.length-1; i>=0; i--)
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.