Ik heb vandaag geprobeert een animatie te maken met javascript.
Een div, en als je erop klik wordt deze langzaam groter, totdat de complete text zichtbaar is.
Maar ik heb een erg langzame computer.
Dus eigenlijk heb ik geen idee of het op andere computers sneller loopt en hoe snel.
Misschien heeft het script op mijn computer vertraging en doet hij er dus langer over.
Als de functie binnen de setInterval langer duurt dan het aantal milliseconden wat ik invul, dan lijkt hij de volgende interval gewoon later uit te voeren.
Dus hoe kan ik dan de tijd inschatten als ik er niet vanuit kaan gaan dat het aantal milliseconden klopt?
En ik vraag me ook af of dit de beste manier is om iets te animeren met javascript...
Of is er een andere manier die beter of soepeler loopt.
Dus wat is eigenlijk de beste manier om dingen te animeren in javascript en hoe kan ik de tijd inschatten?
Een div, en als je erop klik wordt deze langzaam groter, totdat de complete text zichtbaar is.
HTML:
Dat werkt. redelijk goed.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <title> animatie </title> <meta http-equiv='Content-Type' content='text/html; charset=utf-8'> <style type='text/css'> body { background:#777; color:#ccc; } div { cursor:pointer; cursor:hand; background:#444; width:30em; overflow:hidden; height:150px; border:5px solid #9f0; } p { margin:.5em; } </style> <script type='text/javascript'> window.onload=function() { var obj=document.getElementById('text'); obj.onclick=function() { var self = this; self.onclick = null; var start = self.clientHeight || self.offsetHeight; var total = (self.scrollHeight - start); var fps = 200; var a = (total/(fps/100))/2; var b = 2*(1/((total/(fps/100))/Math.PI)); var interval = setInterval(function() { o = start + ((total/2) + (total/2) * Math.sin(b*a + Math.PI/2)); a--; if(a>=0) { self.style.height = (o<1?0:o) + 'px'; } else { self.style.height='auto'; clearInterval(interval); interval=null; } },10); } } </script> <div id='text'> <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed iaculis. Morbi sollicitudin leo nec ipsum. Duis ut arcu. Aliquam erat volutpat. In fringilla tristique ante. In faucibus porttitor enim. Mauris ac sapien. Cras sodales interdum augue. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus porttitor iaculis dui. Nulla et nulla. Ut nulla lectus, faucibus non, iaculis vel, tristique et, lectus. Nam vitae odio non quam auctor vehicula. Nulla elementum. Nulla lacinia laoreet diam. Vestibulum condimentum, purus eget ullamcorper fringilla, orci dui dictum diam, vel pulvinar nibh ligula quis lectus. Sed vehicula, nisi a blandit laoreet, purus ante eleifend nisi, et lacinia velit risus a velit. <p>Vestibulum non turpis. Vestibulum non risus. Sed vel leo sit amet orci pharetra scelerisque. Ut suscipit arcu id orci. Quisque et sem id ligula pretium aliquet. Fusce nulla sapien, consectetuer eu, volutpat ac, viverra eu, enim. Pellentesque dictum urna eget ante. Cras neque. Nulla condimentum quam a mauris. Donec ut turpis eu tortor elementum tristique. Nulla a ipsum pulvinar nisl sagittis viverra. Donec pede purus, porttitor rhoncus, commodo quis, accumsan nec, augue. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Nam tincidunt cursus erat. <p>Morbi ullamcorper tristique risus. Aliquam velit. Etiam ac ante id quam lobortis fermentum. Nam mauris sem, varius sed, pulvinar quis, luctus et, nulla. Pellentesque eget pede. Proin interdum, leo ut dictum ultrices, elit odio semper purus, sit amet tincidunt sem elit nec nisi. Etiam quam. Donec neque. Donec justo dui, pharetra aliquam, molestie pharetra, aliquet dictum, justo. Duis sapien. Vestibulum quis tortor a odio gravida condimentum. Nulla facilisi. Integer velit. Vestibulum eget nulla. Nunc sollicitudin odio et nulla. Sed porttitor odio non nulla. </div> |
Maar ik heb een erg langzame computer.
Dus eigenlijk heb ik geen idee of het op andere computers sneller loopt en hoe snel.
Misschien heeft het script op mijn computer vertraging en doet hij er dus langer over.
Als de functie binnen de setInterval langer duurt dan het aantal milliseconden wat ik invul, dan lijkt hij de volgende interval gewoon later uit te voeren.
Dus hoe kan ik dan de tijd inschatten als ik er niet vanuit kaan gaan dat het aantal milliseconden klopt?
En ik vraag me ook af of dit de beste manier is om iets te animeren met javascript...
Of is er een andere manier die beter of soepeler loopt.
Dus wat is eigenlijk de beste manier om dingen te animeren in javascript en hoe kan ik de tijd inschatten?