Toon posts:

OnMouseEvent while lopen starten & stoppen

Pagina: 1
Acties:

Verwijderd

Topicstarter
zit nu al tijdje te klooien en te doen maar kom er niet meer uit ...

ik heb een hrefje gemaakt met daarin OnMouseOver en OnMouseOut

het is de bedoeling dat als er een OnMouseOver wordt getriggerd dat er een
functie moveIT wordt gestart en dat de innerHTML van een div op 'no' wordt gezet

de functie kijkt naar de innerHTML van de div en moet stoppen wanneer die niet meer 'no' is.

heb een for, while, do while loop gebruikt en die werken niet (code heb ik al weggegooid) en heb er nu een recursieve functie van gemaakt in de hoop dat hij het wel goed zou doen maar dus ook niet ...

probleem is namelijk dat hij eerst zijn loop uitvoert en dat ik hem dus niet meer kan onderbreken als er een OnMouseOut event wordt getriggerd


function moveIT(loops,action) {

max = document.getElementById("wall").width / 2;
min = 0;

if (loops < max) {
loops += 1;
image.scrollLeft += 1;
action = data.innerHTML;

return moveIT(loops,action);

}

}

<a href="#" OnMouseOver="data.innerHTML='no';moveIT(0,'no')" OnMouseOut="data.innerHTML='yes'">left</a>

<div id="data" style="visibility:visible">yes</div>

Verwijderd

Wat wil je dat die moveIT() doet dan? Als er iets geleidelijk moet veranderen, dan moet je met setTimeout of setInterval werken.

Verwijderd

Topicstarter
die functie moet wat verplaatsen voor me
de rest van de functie leek me irrelevant eigenlijk :)

Verwijderd

Ik neem aan dat die het geleidelijk moet verplaatsen, dat zou wel verklaren waarom je een recursieve loop gebruikt.

Dat wordt setTimeout of setInterval. Ik gebruik setTimeout nu, ben een beetje lui:
function moveit() {
image.style.left=image.offsetLeft+5;
if (image.offsetLeft<500) setTimeout('moveit()',100);
}
Ik gebruik zelf liever geen hoofdletters voor functies of onmouseover en dergelijke. Ik vind het alleen maar lastig.
Ik neem aan dat jij zelf wel weet hoe image is gedefinieerd.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 09:16

crisp

Devver

Pixelated

Een loop of een iteratieve functie zal het resultaat pas tonen op het moment dat de loop / functie klaar is (dan krijgt de render-engine pas weer tijd om de wijzigingen in het document te renderen).
Voor dit soort dynamische dingen moet je dus intervals of timeouts gebruiken.

Intentionally left blank


Verwijderd

Topicstarter
thanx werkt perfect! heb het net even in de functie verwerkt .. zag je post pas later maar ging idd ook om een afbeelding te verschuiven :)

function moveIT(loops,action,moveto) {

max = document.getElementById("wall").width / 2;
min = 0;

if (loops < max && action=='no') {
loops += 1;
d.innerHTML = loops;
image.scrollLeft += 1;
action = data.innerHTML;

setTimeout('moveIT(' + loops + ',"' + action + '","' + moveto + '")',10);

}
}
Pagina: 1