/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Mere hjælp til clipping funktion
Fra : Jørgen Farum Jensen


Dato : 09-10-09 12:11

Tak for tidligere svar, det hjalp.
Nu er jeg gået i stå igen:

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/
..

 
 
Birger Sørensen (09-10-2009)
Kommentar
Fra : Birger Sørensen


Dato : 09-10-09 12:46

Jørgen Farum Jensen kom med følgende:
> Tak for tidligere svar, det hjalp.
> Nu er jeg gået i stå igen:
>
> 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)

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



Birger Sørensen (09-10-2009)
Kommentar
Fra : Birger Sørensen


Dato : 09-10-09 13:07

Birger Sørensen skrev:
> Jørgen Farum Jensen kom med følgende:
>> Tak for tidligere svar, det hjalp.
>> Nu er jeg gået i stå igen:
>>
>> 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)
>
> 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



Birger Sørensen (09-10-2009)
Kommentar
Fra : Birger Sørensen


Dato : 09-10-09 13:28

Birger Sørensen skrev:
> Birger Sørensen skrev:
>> Jørgen Farum Jensen kom med følgende:
>>> Tak for tidligere svar, det hjalp.
>>> Nu er jeg gået i stå igen:
>>>
>>> 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)
>>
>> setTimeout("wipeRight('"+objekt+"','"+kant+"')",30);
>>
>> Får det til at virke i FF.
>>
>> Birger

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

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Lasse Reichstein Nie~ (10-10-2009)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 10-10-09 12:37

=?ISO-8859-15?Q?Birger_S=F8rensen?= <sdc@bbsorensen.com> writes:

>
> 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.'

Jørgen Farum Jensen (11-10-2009)
Kommentar
Fra : Jørgen Farum Jensen


Dato : 11-10-09 15:47

Lasse Reichstein Nielsen skrev:
> =?ISO-8859-15?Q?Birger_S=F8rensen?= <sdc@bbsorensen.com> writes:
>
>> 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);

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.

--

Med venlig hilsen
Jørgen Farum Jensen
Håndbog i webdesign: http://webdesign101.dk/wwwbog/udgave2/
Webdesign med stylesheets: http://webdesign101.dk/cssbog/
..

Stig Johansen (12-10-2009)
Kommentar
Fra : Stig Johansen


Dato : 12-10-09 20:47

Jørgen Farum Jensen wrote:

> 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

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste