Avatar billede bongo20 Nybegynder
17. december 2004 - 10:51 Der er 24 kommentarer og
1 løsning

flytte objecter hurtigt

Jeg sidder og leger med noget javascript der skal få div´s til at "flyve" rundt og få mig til at smile.

Jeg synes bare ikke det kører særlig optimalt.

F.eks. har jeg prøvet følgende:

function Move(i)
{   
    clearTimeout( t );
    d.getElementById('div2').style.left=i;
    i -= 1;       
    t = setTimeout( "Move( "+ i +" )", 10 );
}

uanset om jeg sætter ms til 1 eller 10 eller 100 så er der ikke meget turbo i mine div.
Ændrer jeg så antallet af pixels pr kald til f.eks. 5 så sker det hele meget rykvis...

Er der nogen der har en god ide, eller en stump kode der gør det bedre end min?

:o)
Avatar billede roenving Novice
17. december 2004 - 12:06 #1
Et gæt er, at browseren simpelthen ikke kan nå at reagere hvert 10. millisekund, jeg prøvede lige med:

<script language="javascript" type="text/javascript">
function Move(i)
{   
    if(i==0)return;
    document.getElementById('minDiv').style.left=i+'px';
    i -= 1;       
    setTimeout( "Move( "+ i +" )", 5 );
}
window.onload = function(){Move(200)}
</script>

<div id="minDiv" style="position:relative;width:200px;left:220px;border:1px solid red;">En div-tekst</div>

-- som udførte nummeret, men uanset hvilken værdi under ca. 12 ms gav den samme hastighed !-)
Avatar billede skovenborg Nybegynder
17. december 2004 - 12:20 #2
Du får nok aldrig særlig meget turbo på når du kun trækker én fra hver gang, og som roenving siger er det ikke sikkert browseren kan nå at følge med, hvis den skal køre hvert 10. ms (hvorfor han så sætter den til 5 bagefter er mig en gåde).

Mit bud ville være at trække 2 fra hver gang, da det lige akkurat ikke går så meget i ryk som ved fx 5:
<script language="javascript" type="text/javascript">
var i = 200;
var divElm;
function Move()

    if(i==0)return;
    divElm.left=i+'px';
    i -= 2;
}
window.onload = function(){window.setInterval("Move();",20);divElm = document.getElementById('minDiv').style}
</script>

Nu har jeg også prøvet at belaste browseren så lidt som muligt hver gang funktionen køres - om det så giver noget mærkbart resultat ved jeg ikke, men det er værd forsøge. Nu kan du så lige lege lidt med intervallet (har sat den til 20 hvilket godt kan virke lidt langsomt, men skulle i teorien kun tage 2 sek. om at være færdig.
Avatar billede bongo20 Nybegynder
17. december 2004 - 12:57 #3
ok,.. det er jo ikke helt optimalt, men nok den brgrænsning der er.
Hvis nu man VIL have det til at gå lynende, skal man så bruge flash eller !?!?
Avatar billede skovenborg Nybegynder
17. december 2004 - 12:59 #4
det var i hvert fald ikke en så dårlig idé. Javascript er trods alt ikke så velegnet til animationer og den slags.
Avatar billede olebole Juniormester
17. december 2004 - 16:17 #5
<ole>

Nu kan man jo prøve at sammenligne skærmens opdaterings frekvens med 10ms og se, hvor realistisk, det er. En 80Hz skærm opdaterer f.eks. hvergang, der er gået 12,5ms  :)

Normalt plejer man at regne med, at 30-35ms er grænsen for JS-animationer. Video kører med en frekvens på omkring 40ms - så hvis et TV er hurtigt nok, er der med andre ord ingen grund til at ligge og rode nede omkring 10ms  ;o)

Framerate er kun den ene ting, der afgør, hvor hurtig en animation kører ... det er ligeså vigtigt, hvor langt, emnet flyttes pr. frame. Du må altså bare flytte noget længere pr. 'frame'  :)

/mvh
</bole>
Avatar billede bongo20 Nybegynder
20. december 2004 - 10:35 #6
ok, det lyder meget korrekt alt sammen,.. men jeg synes bare når jeg ser flash animationer rundt omkring så glider det langt flottere over skærmen,.. hvad er forskellen, skal skærmen ikke stadig kunne følge med til at opdatere billedet ??
Avatar billede olebole Juniormester
20. december 2004 - 14:18 #7
Prøv at give et eksempel. Til mit brug virker JS-animationer fint, men det er klart, at hvis du vil flytte rundt på meget tunge ting, kan du få problemer  :)
Avatar billede thomas_yde Nybegynder
20. december 2004 - 14:32 #8
flash animationer er små film sekvenser, som kører i sin egen tråd.
Javascript skal bruge processorkraft til at udregne næste position, dvs afhængig af cpu'en, som er baseret på kø politik, så hvis din animation halter en lille smule kan det muligvis være fordi der er kommet en eller to processer foran i køen.

Bare et gæt...de kloge hoveder kan nok forklare det bedre :P
Avatar billede bongo20 Nybegynder
20. december 2004 - 22:35 #9
olebole, selv når det er ganske små tekststrenge jeg flytter så ser det ikke optimalt ud.

Man kan f.eks. se en lille tekstboks i højre side af www.bold.dk ´s forside, der har en smule tekst om nogle odds der glider fra bund til top, i flash ... et smukt ensformigt glid som jeg ikke kan skabe med js ..

:o)
Avatar billede olebole Juniormester
21. december 2004 - 17:38 #10
Hvis det ikke skal være mere jævnt end det, er det da 'a piece of cake'  :)
Jeg forstår ikke, hvad dit problem består i
Avatar billede bongo20 Nybegynder
22. december 2004 - 08:26 #11
mine egne evner måske så ??

ihvertfald kører mit js ikke som det jeg kan se der.
Har du noget js kode der kører ligeså godt som det på bold.dk ?
Avatar billede bongo20 Nybegynder
27. december 2004 - 14:12 #12
eller det vil du måske ikke af med :o)
Avatar billede olebole Juniormester
29. december 2004 - 09:02 #13
Hej igen bongo20. Der gik vist lidt Jul og alm. glemsomhed i dette spm ... sorry  ;o)
Jeg sad og pillede lidt med det og du har for så vidt ret - da JS kun kan flytte teksten én pixel ad gangen, kan det være svært at få en animation 'glat', når den kører så langsom.
Jeg lavede dog et lille animations-objekt, der udfører et lille 'antialiasing-trick'. Jeg skal lige have det ryttet en anelse op - så kyler jeg det op lidt senere idag - det nåede jeg aldrig  :)
Avatar billede olebole Juniormester
29. december 2004 - 16:26 #14
Avatar billede bongo20 Nybegynder
30. december 2004 - 10:55 #15
Det da det bedste i js jeg har set endnu,..
men filen TextScrollerObject.js vil du ikke af med ? 

;o)
Avatar billede powernodes Nybegynder
30. december 2004 - 10:58 #16
Den er da lige til at hente :)
Avatar billede powernodes Nybegynder
30. december 2004 - 11:00 #17
den er sprød Ole, :)
Avatar billede bongo20 Nybegynder
30. december 2004 - 11:11 #18
ja det var den jo,.. men den browser er så nøjeregnende med hvad man skriver :o)

Får jeg et svar ?

og mange tak....
Avatar billede olebole Juniormester
30. december 2004 - 14:17 #19
s'gerne ... og selvtak  :)
Avatar billede olebole Juniormester
30. december 2004 - 14:28 #20
... og lige en tak for den 'sprøde ros' til dig Peter. Ja, jeg finder den faktisk også selv lidt småpornografisk  ;o)

Jeg er temmelig sikker på, du har været nede i js-filen og lure (og formår at gennemskue den), men til andre kan jeg lige forklare, hvad der i hovedtrækkene sker:
Når jeg instantierer objektet, opretter jeg et ekstra div, der er nøjagtig magen til det med links i. Dette div giver jeg en opacity på 25% og lægger det præcist ovenpå det oprindelige.
Hveranden gang der flyttes, er det det ene div, der flyttes én pixel - resten af gangene flyttes det andet. Derved bliver det hele 'antialiased' og scrollingen fremstår mere flydende.
Når man stopper scrollingen (enten ved mouseover eller ved metoden 'stop'), skjules det halvtransparente div, så det ikke slører billedet - og vises igen ved mouseout (eller brug af start-metoden).

Godt nytår  ;o)
Avatar billede roenving Novice
30. december 2004 - 14:33 #21
-- ja, det er zqi da en typisk olebole-løsning *lol*
Avatar billede olebole Juniormester
30. december 2004 - 14:47 #22
ehhhm ... jeg tillader at tage det som en kompliment, Jes. I hvert fald kan man sige, det er '_p.rototypen' på en OleBole-OOP-løsning, som du jo før har set dem  ;o)

Jeg siger ikke nødvendigvis, det er den fede løsning - når nu Flash er opfundet - men det er jo altid sjovt, når et af ens syge pandelaps misfostre af en tanke kan bæres igennem til noget, der faktisk fungerer lækkerligt  :)
Avatar billede roenving Novice
30. december 2004 - 15:14 #23
Det var også sådan det skulle tages !-)

-- og du kan jo gætte på, hvor linket er røget hen !o]
Avatar billede olebole Juniormester
30. december 2004 - 15:31 #24
damned ... jeg er røget i 'viceinspektørens' sorte bog  ;D
Avatar billede roenving Novice
30. december 2004 - 15:32 #25
*rotflmao*
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester