
Oprava třídy/funkce v JS
Ahoj, jak můžu napsat tuto třídu lépe a funkčně ? Ono to nějak funguje ale jen pokud to zavolám jednou, když to zavolám vícekrát tak se ten text celý kříži. Hotové řešení jsem nenašel a tohle jsem skládal 3 hodiny Díky za pomoc.
function classM(text)
{
this.elem = document.getElementById('div');
this.len = text.length;
this.character = 0;
this.text = text;
function Writer() {
this.character++;
var type = this.text.substring(0, character);
this.elem.innerHTML = type;
if (this.character !== len) {
setTimeout(Writer, 20);
}
};
Writer();
}
classM('cokoliv cokoliv cokoliv cokoliv');
classM('neco jineho neco jineho neco jineho neco jineho');
Tak ještě aby se to nekřížilo, když obojí zapisuješ do stejného elementu.
Já ale potřebuji zapisovat do stejného elementu. Jenže nevím jak to ošetřit když přijde víc požadavků současně a potřebuji je vypsat všechny..
Vypsat všechny jakým způsobem?
Jak to myslíš, jakým způsobem ? Potřebuji vypsat všechny texty, budou jich stovky..
A musí být v tom samém divu? Nestačilo by kdyby každý byl ve vlastním, který by byl uvnitř toho hlavního divu?
To by asi určitě stačilo..
Tohle funguje, ale vypisuje se to zároveň (pokud jde současně > 1 požadavek), což je velmi nepřehledné :( Nešlo by to vypisovat po jednom ?
No proto jsem se ptal, jakým způsobem to chceš vypisovat. Pokud se nebudeš vyjadřovat přesně, tak nedostaneš přesné odpovědi.
jj, moje chyba, omlouvám se...
Když se dívám na ten tvůj kód tak je vidět, že programování není o tom, že něco napíšeš a funguje to, ale je to hlavně o přemýšlení. Tvůj kód je rychlý a malý, ne jako ten můj slepeny a nepřehledný bastl
Sice nevím co asi dělejí přesně 2 řádky ale to snad dohledám.. Jinak velké díky! Funguje fakt super, jen škoda, že to vypisuje i html tágy a nebere je v potaz .. Nemůžu to nějak jednoduše změnit ?
Příklad: classM('Text Text <br /> Text Text');
PS Omlouvám se, při dotazu mě to nenapadlo, že to nepůjde..
No ty tagy to bere v úvahu, pokud se vrátím zpět ke tvému řešení se substringem:
Ale taky to není zdaleka ideální. Dost to celé komplikuje.
Chtěl bych se ještě vrátit k tvému kódu, snažím se někam umístnit callback s parametrem, že bych to pak volal classM(text, callback, paramer); Problém je v tom, že ne každé volání classM() callback nepotřebuje, mám to pak volat classM(text, null, null); nebo classM(text, false, false); nebo úplně jinak ? Děkuji
Prostě jenom classM(text).
A tan callback mám vložit kam ?
No pokud ho nepotřebuješ, tak nikam.
Právě že někdy ho potřebuji, někdy se hodí i callback + parametr.. (nebo je to atribut ?)
Když ho potřebuješ, tak ho tam dáš, když ho nepotřebuješ, tak ho tam nedáš. JS je v tomhle velmi benevolentní.
Ale nevím na jaké místo ho vložit v tom kódu, odkud ho mám volat.. aby se zavolal po dokončení jednoho cyklu, ne až se to provede celý.
Tak teď ti nerozumím.
No spustím příkaz classM('Nějaký text', nazevFunkceKterouChciSpustitPoVypsaniTextu, 'Nějaký paramer'); Text se vypíše ale funkce se nespustí, jelikož v tom kódu od tebe se s tím nepočítalo. A chtěl bych to tam vložit ale nevím přesně kam.
No logicky tam, kde tu funkci chceš spustit.
No jen kdybych věděl kde končí jeden cyklus
V tom mém kódu ale žádný cyklus není.
No cyklus v pravém slova smyslu ne, ale návaznost, že volá sám sebe tam je...
Tomu se říká rekurze.
Jestli má pokračovat či ne, se zjišťuje následující podmínkou:
Aha, tak že by to mělo být takto ?
Spíš před ten start, protože tím už se začíná vypisovat další řádek.
OK, díky moc. a můžem mi obasnit tohle ?
Pokud je počet položek ve frontě větší než 1, tak se vykreslení další položky odstartuje po vykreslení té současné. Takže stačí vložit položku do fronty.
Tak vložit jen položku do fronty nestačí, ne ?
Stačí, protože z fronty se to zase vybere po dokončení předchozí položky.
Tak že mám volat classM() jen jednou ? a pak jen plnit tu frontu ?
Voláš ji tolikrát, kolik chceš přidat řádků.