function wipeRight(objekt,kant){
if (clipTal(objekt,kant)<width) {
clipMed(objekt,0,0,0,5)
setTimeout("wipeRight()",30)
}
}
skal besk�re 'objekt' fra venstre
med 5 pixel per gang. Funktionen
standser naturligvis ved setTimeout.
I grunden er det et meget generelt
sp�rgsm�l: Hvordan er det lige man
gentager en funktion uden at overf�re
argumenterne?
http://webdesign101.dk/www/javascript/clipping3a.html
(�verste knap)
--
Med venlig hilsen
J�rgen Farum Jensen
H�ndbog i webdesign: http://webdesign101.dk/wwwbog/udgave2/
Webdesign med stylesheets: http://webdesign101.dk/cssbog/
.
setTimeout("wipeRight('"+objekt+"','"+kant+"')",30);
Fᅵr det til at virke i FF.
Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk
Ville vist have skrevet lidt forklaring, og et svar pᅵ det egentlig
spᅵrgsmᅵl..
Den metode du bruger i setTimeout, vil bruge eval() funktionen til at
finde ud af hvilken funktion der skal kaldes, og man kan der overfᅵre
parametre.
Hvis du gᅵr som du har gjort i de ᅵvrige tre, kan du undgᅵ dette, ved
at kalde
setTimeout( wipeRight, 30);
altsᅵ uden strenge, og uden paranteserne. Der kan sᅵ ikke overfᅵres
variable - hvis det er nᅵdvendigt kan de oprettes som globale variable,
som den kaldte funtion jo vil have adgang til.
At ungᅵ eval() anbefales - isᅵr hvor der kan vᅵre mulighed for brugere
at indtaste data, der vil kunne blive udfᅵrt som kommandoer.
I FF, skal du kunne bruge
setTimeout( wipeRight, 30, objekt, kant);
for at overfᅵre parametre. Det virker ikke i IE.
https://developer.mozilla.org/en/DOM/window.setTimeout
>
> setTimeout("wipeRight('"+objekt+"','"+kant+"')",30);
>
> F�r det til at virke i FF.
Alternativt, uden at bruge strenge som argument til setTimeout:
setTimeout(function(){ wipeRight(objekt, kant); }, 30);
Det er skr�beligt at lave sin kildetekst i strenge. Der er mange
v�rdier der ikke nemt kan laves om til en streng, fx objekter.
Hvis man kan lave en funktion i stedet, s� kan man overf�re alle
typer v�rdier uden at lave dem om til strenge f�rst, og derefter
tilbage igen.
En helt anden tilgangsvinkel er at bruge setInterval:
function wipeRight(objekt, kant) {
var interval_id;
function action() {
if (clipTal(objekt, kant) < width) { // hvor er width defineret?
clipMed(objekt, 0, 0, 0, 5);
} else {
clearInterval(interval_id);
}
}
interval_id = setInterval(action, 30);
}
Her slipper man for at lave en ny funktion hver gang.
Hvis man ikke kan vente 30 ms p� det f�rste skridt, s� kan man kalde
action manuelt i slutningen af wipeRight.
/L
--
Lasse Reichstein Holst Nielsen
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'
Ja, hvis man er fortrolig med anonyme funktioner. Jeg
har l�st noget om det uden helt at forst� det. Tak for
en konkrete guide.
> En helt anden tilgangsvinkel er at bruge setInterval:
>
> function wipeRight(objekt, kant) {
> var interval_id;
> function action() {
> if (clipTal(objekt, kant) < width) { // hvor er width defineret?
> clipMed(objekt, 0, 0, 0, 5);
> } else {
> clearInterval(interval_id);
> }
> }
> interval_id = setInterval(action, 30);
> }
Smart. setInterval er selvf�lgelig rigtigere i denne
sammenh�ng.
width er defineret som en global variabel.
Funktionen ser nu s�ledes ud:
var width=275;
var height=184;
var speed=30;
function wipeRight(objekt, kant, pixel) {
var interval_id;
function action() {
if (clipTal(objekt, kant) < width) {
clipMed(objekt, 0, 0, 0, pixel);
} else {
clearInterval(interval_id);
}
}
interval_id = setInterval(action, speed);
}
Ideen er at ende med en universalfunktion,
der kan besk�re fra en vilk�rlig kant. S� nu er
jeg strandet p� problemet med at passere en negativ
talv�rdi for den variable pixel.
> Smart. setInterval er selvf�lgelig rigtigere i denne
> sammenh�ng.
Umiddelbart er det smartere, men jeg synes du skulle tage et kig p� hvordan
de har lavet zoom/animationen ovre p� browsershots.org.
Den kunstruktion g�r, at det ogs� virker p� �ldre maskiner, uden det ser
stygt ud.
--
Med venlig hilsen
Stig Johansen