Autor Zpráva
Tori
Profil
Pěkný večer.
Zkoušela jsem udělat běžící titulek okna, jako upozornění pro nějaký chat. Přes window.setInterval je volaná funkce, co odkrajuje písmenka ze začátku a lepí je na konec titulku. Časování ale běží různou rychlostí: když nechám na vrchu záložku s tím běžícím titulkem a přes ni otevřu jiné okno, tak text na záložce i dole na liště otevřených programů běží správně. Když ale místo toho přepnu na jinou záložku, tak se titulek toho "chatu" posunuje o hodně pomaleji. Poradíte prosím, čím to je?
Díky moc.

Ukázka.
okolojdouci
Profil *
Nechci vypadat jako kverulant, ale myslím, že mi to v opeře nefunguje.
Tori
Profil
okolojdouci:
Á, moje chyba, zkoušela jsem jen Chrome a Firefox (7). Opera se instaluje, bude mi to chvilu trvat.
okolojdouci
Profil *
Přičemž "nefunguje" znamená, že text se ani nehne. Po dvou minutách zírání mi to kino začalo připadat trochu fádní.
Str4wberry
Profil
Co použít raději jiné upozornění na změnu stavu?

(Pokud je podstatou vlákna pouze odlišná rychlost intervalu, berte můj příspěvek jako bezpředmětný.)
Tori
Profil
okolojdouci:
V Opeře mi to taky šlo, ale zas až příliš rychle. :D (Btw změnila jsem to automatické spouštění na ruční - takže zkuste spustit a pak přepnout na jiný tab.)

Str4wberry:
Ano, podstatou dotazu bylo, že nerozumím tomu, proč časovač ve stejném prohlížeči i okně běží různými rychlostmi. Za odkaz děkuju, pouvažuju nad alternativami. Běžící titulek mi napadl jen proto, že jsem to viděla použité v podpoře na hostingu a nevypadalo to zle.
_es
Profil
Tori:
Nechce sa mi rozoberať ten kód, vyzerá to chaoticky. Tipol by som si, že nejako dochádza k mnohonásobnému spusteniu viacerých časovačov.
Mala by si zabezpečiť, aby ten časovač bežal len raz, napríklad nejako takto:
var t = null, perioda = 100;
function animacia(){ Kód na zmenu titulku okna }
function startAnimacie(){if(t === null) t = setInterval(animacia, perioda))}
function koniecAnimacie(){clearInterval(t); t = null}
Tori
Profil
_es:
To jsem tam měla, pak jsem to omylem zakomentovala, už je to zpět:
	this.start = function(newTitle)	{
		if (that.loop == null)	{
			var t = newTitle || that.title;
			t += '   ';
			that.loop = window.setInterval( 
				function() {
					document.title = t;
					t = t.substr(1)+t.charAt(0);
				}, 100); 	
		}
	};
(that je odkaz na původní objekt, protože this uvnitř funkce odkazovalo na window. Omlouvám se, že ignoruju běžné názvové konvence pro proměnné apod., JavaScript nemám ještě zažitý.)
_es
Profil
Tori:
Aký význam tam majú vlastnosti active, setActive a setUnactive?
Na čo tak zložito priraďuješ udalosti okna onfocus a onblur, keď window.onfocus a window.onblur spoľahlivo fungujú vo všetkých prehliadačoch?
Na môj vkus tam je toho objektového obalu nejako priveľa a namiesto zjednodušenia to je skôr skomplikovanie.
Tori
Profil
_es:
„Aký význam tam majú vlastnosti active“
Stav toho okna, jestli je momentálně aktivní nebo ne. Nenašla jsem žádnou vlastnost objektu window, ze které bych to snadno zjistila, takže mi napadlo přepínat handlerama. Asi je to overkill, že?

„, setActive a setUnactive?“
To je asi zbytečné, pravda; nevhodná aplikace DRY.

Na čo tak zložito priraďuješ udalosti okna?
Pro případ, že by se to mělo použít někde, kde už je na window.onfocus pověšený jiný handler, tak aby se ten původní nepřepsal, ale nicméně aby to fungovalo i ve starém prohlížeči, který zná jen window.onfocus. (Ale když je to teda ok, tak jsem ty ostatní varianty dala pryč a nechala jen window.on*).

Děkuju za ochotu se v tom povrtat. :-)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0