Autor Zpráva
FantomX1
Profil
Preco zavolanie funkcie z inej funkcie neberie lokalnu premennu ako svoj atribut?

Mam tu vyorovu funkciu:

function move(prem) {
//zavolam funckiu pri nacitani stranky <body onLoad="move(1)"
objekt=document.getElementById('flyer').style;
//zvolim si prvok pre pracu
var k=160;
//urcim prvotnu suradnicu prvku
var e=document.getElementById('flyer').clientHeight;
//zistim offset prvku pri pripadnu potrebu

if (prem==1) {
/*Ak bola funkcia zavolana s parametrom 1 text sa zacne hybat, ale ak vsak, ak vsak bola zavolana s
inym parametrom text by sa mal zastavit.*/
if (y<=k-e) y=k;
y -=3;
objekt.top=y+"px";
setTimeout("move(prem)",50);
}

Ale ked spustim funkciu move(0) tak mi pri funkcii setTimeout vypise ze premenna prem nie je definovana. Napada ma jedna moznost, ze po nacitani stranky sa opakuje funkcia v pravidelnych intervaloch. Tak v case 0 ms sa nastartuje funkcia move(1) a ja v case teoreticky 25 ms spustim funkciu move(0) rucne. Takze sa vlastne nic nestane, ani sa nezvacsi suradnica prvku, ale o dalscih 25 ms sa uz zase pohne prvok. A tak sa stane o dalsich 50 ms a o dalsich 50 ms atd. Ale ako potom mozem zastavit konatie cyklu funkcii move()? Je na to nejaky prikaz ze ak a==1 tak sa vypne setTimeout?
centi
Profil
Pretože argument funkcie setTimeout nemôže byť funkcia, ale jej názov, teda reťazec. Skús takto"

setTimeout("move("+prem+")",50);
Leo
Profil
Zkuste tu promennou deklarovat jako globalni, Leo
FantomX1
Profil
OK, skusil som radu centi -ho a fakt to tak ide, ale nic to nemeni na tom ye setTimeout sa nadalej vykonava, potrebujem ho po prejdeti prvku mysou nejak zastvit, ale neviem ako.
centi
Profil
FantomX1
Sprav si funkciu, ktorä zavesíš na onmouseover (alebo čo potrebuješ), ktorá zavolá funkciu move s parametrom, ktorý bude obsahovať 'stop' namiesto čísla, teda napr:


function stopTime()
{
move('stop');
}


a funkciu move uprav tak, aby najprv testovala, či netreba stopnúť, ak nie, tak očakáva nejaké čislo:


function move(prem) {
if (prem=='stop')
{
if (tm)
{
//ak je uz timeout nastaveny
clearTimeout(tm);
tm = null;
}
}
else
{
//zavolam funckiu pri nacitani stranky <body onLoad="move(1)"
objekt=document.getElementById('flyer').style;
//zvolim si prvok pre pracu
var k=160;
//urcim prvotnu suradnicu prvku
var e=document.getElementById('flyer').clientHeight;
//zistim offset prvku pri pripadnu potrebu

if (prem==1) {
/*Ak bola funkcia zavolana s parametrom 1 text sa zacne hybat, ale ak vsak, ak vsak bola zavolana s
inym parametrom text by sa mal zastavit.*/
if (y<=k-e) y=k;
y -=3;
objekt.top=y+"px";

//treba timeout vlozit do premennej, na ktoru sa odkazes pri stopnuti
tm = setTimeout("move(prem)",50);
}
}


Netestoval som to, ale tak nejak by to mohlo ísť.
FantomX1
Profil
OK, zase som sa hrabal netom a nasiel to co som hladal, dnes mam asi stastny den. Interval sa da zrusit funkciou window.clearInterval(IDintervalu); a aby sme vedeli ID intervalu, musime dat funkciu do premennej teda napriklad var IdInt=setInterval('ahoj()', 10) a to iste sa tyka aj setTimeoutu. Je to na stranke DEV Guru JavaScript Object
centi
Profil
FantomX1
Presne to som napísal :-)
FantomX1
Profil
Dik centi ale uz som na to prisiel a toto zarucene funguje . Teda dosiahol som to co som chcel, vertikalny skrolovaci text a ked nad nadidem mysou tak sa zastavi a ked z neho zidem tak sa zase hybe. Myslim ze coskoro to bude na stranke www.CiernyPeter.sk
FantomX1
Profil
Aha, ano, vsimol som si, ale trochu neskor, tak dik :)
Toto téma je uzamčeno. Odpověď nelze zaslat.