scripting.rst 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. =========
  2. Scripting
  3. =========
  4. Los *scripts* o guiones permiten añadir interactividad a la página.
  5. Se recomienda proporcionar alternativas a los guiones siempre
  6. que sea posible, pues muchos usuarios los desabilitan o no pueden
  7. utilizarlos.
  8. El elemento ``script``
  9. ======================
  10. Permite incluir un guion dinámico y bloques de datos en los documentos.
  11. Este elemento no representa contenido para el usuario.
  12. El atributo ``type`` permite indicar cómo debe interpretar el navegador el
  13. contenido de la etiqueta.
  14. - Si se omite el atributo o se establece a un tipo MIME de JavaScript,
  15. el guion se interpreta como código JavaScript.
  16. - Si se establece el atributo a otro valor, el guion se interpreta como un
  17. bloque de datos que no es procesado. Se debe utilizar un tipo MIME válido.
  18. .. code-block:: html
  19. <head>
  20. <script>
  21. alert('¡Hola, mundo!');
  22. </script>
  23. </head>
  24. El atributo ``src`` indica la ruta donde se encuentra el guion. En este caso
  25. no se debe incluir nada dentro de la etiqueta ``<script>``.
  26. .. code-block:: html
  27. <body>
  28. <p>Párrafo</p>
  29. <script src="externo.js"></script>
  30. </body>
  31. El atributo ``charset`` establece la codificación de caracteres del guion.
  32. Este atributo no debe especificarse si no existe el atributo ``src``.
  33. Los atributos ``async`` y ``defer`` son valores booleanos que indican
  34. cómo se debe ejecutar el guion.
  35. Para guiones normales, si el atributo ``async`` está presente, el guion será
  36. obtenido en paralelo y evaluado tan pronto como esté disponible. Si no está
  37. presente el atributo ``async`` pero está presente el atributo ``defer``, el
  38. guion se obtiene en paralelo y se evalúa cuando la página haya terminado de
  39. interpretarse. Si ningún atributo está presente, el guion es
  40. obtenido y evaluado inmediatamente, bloqueando el intérprete hasta que ambas
  41. tareas se hayan completado
  42. Esto se resume con el siguiente diagrama:
  43. .. image:: imagenes/asyncdefer.png
  44. Se pueden usar varios guiones en una misma página. En el siguiente ejemplo
  45. se utilza un guion interno y otro externo... El interno se trata del
  46. mapa de un juego; el externo es el motor del juego.
  47. .. code-block:: html
  48. <script src="motor-de-juego.js"></script>
  49. <script type="text/x-game-map">
  50. ........U.........e
  51. o............A....e
  52. .....A.....AAA....e
  53. .A..AAA...AAAAA...e
  54. </script>
  55. El elemento ``noscript``
  56. ========================
  57. Este elemento no representa nada si están habilitados los guiones. Se
  58. utiliza para permitir presentar un marcado alternativo a aquellos usuarios
  59. que no tienen habilitados los guiones.
  60. .. code-block:: html
  61. <form action="calcSquare.php">
  62. <p>
  63. <label for=x>Number</label>:
  64. <input id="x" name="x" type="number">
  65. </p>
  66. <script>
  67. var x = document.getElementById('x');
  68. var output = document.createElement('p');
  69. output.textContent = 'Escribe un número y lo multiplicaré por sí mismo inmediatamente';
  70. x.form.appendChild(output);
  71. x.form.onsubmit = function () { return false; }
  72. x.oninput = function () {
  73. var v = x.valueAsNumber;
  74. output.textContent = 'El cuadrado de ' + v + ' es ' + v * v;
  75. };
  76. </script>
  77. <noscript>
  78. <input type=submit value="Calculate Square">
  79. </noscript>
  80. </form>
  81. El elemento ``template``
  82. ========================
  83. Sirve para declarar fragmentos de HTML que pueden ser clonados e insertados
  84. en el documento por un guion.
  85. Cuando se carga la página, el contenido del elemento ``<template>`` no se
  86. muestra.
  87. .. code-block:: html
  88. <body>
  89. <table>
  90. <tbody>
  91. </tbody>
  92. </table>
  93. <template id="fila">
  94. <tr>
  95. <td>
  96. <td>
  97. <td>
  98. <td>
  99. </template>
  100. <script>
  101. var tbody = document.getElementsByTagName('tbody')[0];
  102. const NUMBER_OF_COLUMNS = 4;
  103. const NUMBER_OF_ROWS = 10;
  104. var plantilla_fila = document.querySelector('#fila');
  105. for (let i = 0; i < NUMBER_OF_ROWS; i++) {
  106. var fila = plantilla_fila.content.cloneNode(true);
  107. for (let j = 0; j < NUMBER_OF_COLUMNS; j++) {
  108. let mensaje = 'Fila ' + (i + 1) + '; Columna ' + (j + 1);
  109. var celda = fila.querySelectorAll('td')[j];
  110. celda.innerHTML = mensaje;
  111. }
  112. tbody.appendChild(fila);
  113. }
  114. </script>
  115. </body>
  116. El elemento ``canvas``
  117. ========================
  118. Canvas (o lienzo traducido al español) es un elemento HTML que permite la
  119. generación de gráficos dinámicamente por medio de guiones. Entre otras
  120. cosas permite la renderización interpretada dinámica de gráficos 2D y
  121. mapas de bits, así como animaciones con estos gráficos.
  122. El elemento ``<canvas>`` se muestra en un navegador con el tamaño
  123. establecido en sus atributos ``width`` y ``height``. Se suele utilizar el
  124. atributo ``id`` para permitir acceder a este elemento mediante JavaScript.
  125. .. code-block:: html
  126. <canvas id="ejemplo" width="200" height="200">
  127. Este texto se muestra si tu navegador no soporta el elemento canvas de HTML 5.
  128. </canvas>
  129. Utilizando JavaScript se puede dibujar en el lienzo...
  130. .. code-block:: html
  131. :emphasize-lines: 4-10
  132. <canvas id="ejemplo" width="600" height="400">
  133. Este texto se muestra si tu navegador no soporta el elemento canvas de HTML 5.
  134. </canvas>
  135. <script>
  136. var ejemplo = document.getElementById('ejemplo');
  137. var context = ejemplo.getContext('2d');
  138. context.fillStyle = 'aquamarine';
  139. context.fillRect(90, 70, 100, 70);
  140. </script>
  141. El anterior ejemplo dibuja un rectángulo en la coordenada 30, 30 con 100
  142. píxeles de ancho y 120 de alto. El eje 0, 0 comienza en la esquina superior
  143. izquierda del canvas, como se puede ver en la siguiente imagen.
  144. .. image:: imagenes/coordenadas-canvas.png