Advertisement
Tankado95

Untitled

Feb 21st, 2018
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.61 KB | None | 0 0
  1. <!DOCTYPE html>
  2.  
  3. <html>
  4. <head>
  5. <title>Prova di animazione</title>
  6. <script type="text/javascript">
  7.  
  8. function createTrail(b){
  9.  
  10. var ret = document.createElement('div')
  11.  
  12. var props = ["position", "background", "width", "height", "left", "top"]
  13. for(var i=0; i < props.length; i++){
  14. ret.style[props[i]] = b.style[props[i]]
  15. }
  16. ret.style.opacity = 0.5
  17. return ret;
  18. // per ora non si vede perchè noi creiamo un elemento però non lo inseriamo nel dom.
  19. }
  20.  
  21. function Box(sb){
  22. var b = document.createElement('div')
  23. var sz = 25
  24. sb.appendChild(b)
  25. b.style.width = '25px'
  26. b.style.height = '25px'
  27. b.style.background = 'red'
  28. b.style.position = 'absolute'
  29. this.X = 0
  30. this.Y = 0
  31. this.dx = 2
  32. this.dy = 3
  33. this.Element = b
  34. var trail = new Array(10)
  35. var counter = 0
  36. var nextTrail = 0
  37.  
  38. for(var i = 0; i < trail.length; i++){
  39. trail[i] = createTrail(b)
  40. }
  41.  
  42. this.UpdateBox = function(){
  43. if (counter++ % 10 == 0){
  44. var t = trail[nextTrail]
  45. if(!t.parentNode)
  46. b.parentNode.appendChild(t)
  47. t.style.left = b.style.left
  48. t.style.top = b.style.top
  49. nextTrail = (nextTrail + 1) % trail.length
  50. }
  51.  
  52. b.style.left = this.X + 'px'
  53. b.style.top = this.Y + 'px'
  54. if(this.X + sz > parseInt(sb.style.width) || this.X < 0) this.dx *= -1
  55. if(this.Y + sz > parseInt(sb.style.height) || this.Y < 0) this.dy *= -1
  56. this.X += this.dx
  57. this.Y += this.dy
  58. }
  59. }
  60.  
  61. var snakes = new Array()
  62.  
  63. // L'evento in questo caso ha due argomenti, in sede di invocazione possiamo mettere
  64. // anche meno argomenti oppure possiamo metterne di più.
  65. // Gli argomenti attuali della funzione vengono forniti all'interno di un dizionario in cui vengono
  66. // messi i nomi associati nella definizione associati con il valore che mettiamo nella chiamata
  67. // questo vuol dire che chiamate in punti diversi della stessa funzione possono avere un numero di argomenti
  68. // diversi con valori diversi.
  69. window.addEventListener("load", function(){
  70. var sb = document.getElementById('snakeBox')
  71. var t = null
  72. sb.addEventListener('click', function(e){
  73. var box = new Box(sb)
  74. box.X = e.offsetX
  75. box.Y = e.offsetY
  76. snakes.push(box)
  77. if(!t){
  78. // All'inizio se non ci sono scatole è inutile avviare il timer.
  79. // Quando faccio setInterval viene restituito un elemento che ci permette anche di bloccare il
  80. // timer. Per bloccarlo gli passo il valore che restituisce.
  81. t = setInterval(function(){
  82. for(var i = 0; i < snakes.length; i++){
  83. snakes[i].UpdateBox()
  84. }
  85. },20)
  86. }
  87. })
  88. })
  89. </script>
  90. </head>
  91.  
  92.  
  93. <body>
  94. <!-- Il browser applica delle politiche per fare in modo che quello che sta sullo schermo
  95. sia visualizzato nel modo giusto -->
  96.  
  97. <h1>Esempio di animazione</h1>
  98. Il quadrato si anima se clicchi
  99. <div id="snakeBox" style="background: blue; width:500px; height: 500px; position: absolute">
  100. </div>
  101. </body>
  102. </html>
  103.  
  104. <!-- -->
  105.  
  106. <!-- Si sono sviluppate delle logiche di layout per fare in modo che quando cambio la finestra
  107. cambio la dimensione della finestra.
  108. Il layout di controlli lo può fare il browser e ha introdotto uno standard su come fare il layout dei
  109. controlli che si adatti alla disposizione.
  110. Prima parte: box model: per ogni elemento calcolo un rettangolo che deve occupare sullo schermo, è il
  111. bounding box.
  112. Per normali esigenze di layout ci sono varie scatole, il body ad esempio all'inizio con le tre scritte è
  113. un rettangolo con una spaziatura attorno c'è il bordo e la spaziatura interna che se
  114. non vengono specificate sono 0. Visto che le scatole devono essere posizionate una vicino all'altra allora
  115. potremmo voler controllare il margine delle scatole dai vicini, questo è perchè c'è il margine.
  116. Oltre a definire il box model il web browser ha una serie di proprietà che caratterizzano tutte le
  117. proprietà che riguardano la pagina (tipo i font, i colori) .
  118.  
  119.  
  120. Canvas: si comporta come una bitmap dove si fa double buffering.
  121. Fino ad ora abbiamo preso modificato la posizione di un elemento che stava già nel dom. Ora vogliamo
  122. creare un nuovo elemento che all'inizio non è presente.
  123. documents.createElement = funzione che fa parte del dom, gli chiediamo di creare un elemento
  124.  
  125.  
  126. -->
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement