events.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. <?php
  2. /*
  3. * To change this license header, choose License Headers in Project Properties.
  4. * To change this template file, choose Tools | Templates
  5. * and open the template in the editor.
  6. */
  7. ?>
  8. <div class="col-md-10 col-md-offset-1">
  9. <h1>Eventos con jQuery</h1>
  10. <p>jQuery facilita la forma de interactuar con los elementos dentro de
  11. una página facilitando el uso de los eventos de forma bastante intuitiva.
  12. Podéis para ello consultar la <a href="http://api.jquery.com/category/events/">documentación oficial</a>.
  13. </p>
  14. <p>
  15. Podéis también ir a la <?php echo "<a href='index.php?do=showCheat'>"; ?>sección de eventos</a>
  16. en la página de Cheatsheet para ver el tipo de eventos que existen
  17. y como usarlos además de este tutorial.
  18. </p>
  19. <p>Las páginas web actuales son interactivas, es decir, los usuarios
  20. pueden realizar un gran número de acciones y los navegadores pueden
  21. capturarlas en forma de eventos. Mover el ratón por la página, hacer
  22. click en un elemento o escribir en un input text. Pero también hay
  23. otro gran número de eventos que ocurren sin intervención del usuario,
  24. como cuando la página es cargada, cuando un vídeo se empieza a
  25. reproducir o termina, etc. En cualquier momento en que ocurre algo
  26. importante en la página, un evento es disparado, y los navegadores
  27. capturan el momento en que ha pasado. Esto permite a los desarrolladores
  28. escuchar a este tipo de eventos y reaccionar acorde a ello.
  29. </p>
  30. <h3>Eventos Básicos de jQuery</h3>
  31. <p>
  32. jQuery ofrece métodos para la mayoría de eventos nativos de los
  33. navegadores. Estos métodos que incluyen “.click()”, “.focus()” o
  34. “.mouseenter()” son abreviaturas para el método “.on ()” de jQuery.
  35. El método on es útil para vincular el mismo controlador de la función a varios eventos,
  36. cuando se desea proporcionar datos a los controladores de eventos, cuando se trabaja
  37. con eventos personalizados o cuando se desea pasar un objeto de varios
  38. eventos y controladores.
  39. </p>
  40. <p id="especial">Este párrafo es especial, no lo toques mucho.</p>
  41. <pre>
  42. <code>
  43. $( "#especial" ).click(function() {
  44. alert( "Has pulsado sobre un párrafo" );
  45. });
  46. $( "#especial" ).on( "click", function() {
  47. alert( "Has hecho click sobre un párrafo" );
  48. });
  49. </code>
  50. </pre>
  51. <br>
  52. <h3>Un Elemento con múltiples Eventos</h3>
  53. <p>
  54. Para que elemento tenga asociado varios eventos, existen varias formas
  55. de conseguirlo. Aunque la más fácil y efectivas es usar ".on()".
  56. </p>
  57. <p id="no-especial">Este párrafo no es especial pero haz click o pasa por encima
  58. para comprobarlo
  59. </p>
  60. <pre>
  61. <code>
  62. $( "#no-especial" ).click(holaMundo).mouseenter(holaMundo2);
  63. function holaMundo() {
  64. alert("Hola Mundo");
  65. }
  66. function holaMundo2() {
  67. alert("Hola Mundo2");
  68. }
  69. $( "#no-especial" ).on( "click mouseenter", function() {
  70. alert( "Has hecho click o has pasado por encima de un párrafo" );
  71. });
  72. </code>
  73. </pre>
  74. <br>
  75. <p>También se puede asignar eventos con diferentes funciones</p>
  76. <p id="pulsar-p">Púlsame o pasa por encima</p>
  77. <pre>
  78. <code>
  79. $( "#pulsar-p" ).on({
  80. mouseover: function() {
  81. alert( "Has pasado por encima de un párrafo" );
  82. },
  83. click: function(event) {
  84. alert( "Has hecho click sobre un párrafo" );
  85. event.stopPropagation();
  86. },
  87. mouseleave: function() {
  88. alert("Has abandonado el párrafo");
  89. }
  90. });
  91. </code>
  92. </pre>
  93. <br>
  94. <h3>Pasar parámetros al Evento</h3>
  95. <p>Puedes pasar datos de manera fácil usando "on()".</p>
  96. <p id="hola">Párrafo dice hola</p>
  97. <p id="adios">Párrafo dice adios</p>
  98. <pre>
  99. <code>
  100. $( "#hola" ).on( "click", {
  101. foo: "hola"
  102. }, function( event ) {
  103. alert( "Párrafo hola dice: " + event.data.foo );
  104. });
  105. $( "#adios" ).on( "click", {
  106. foo: "adios"
  107. }, function( event ) {
  108. alert( "Párrafo adios dice: " + event.data.foo );
  109. });
  110. </code>
  111. </pre>
  112. <br>
  113. <h3>Dentro del controlador del Evento</h3>
  114. <p>Cada controlador del evento recibe un objeto “event”, el cual contiene
  115. numerosas propiedades y métodos. Este objeto es usado mayormente para
  116. evitar la acción predeterminada del evento a través del método
  117. .preventDefault (). Sin embargo, el objeto “event” contiene otras
  118. propiedades y métodos útiles, incluyendo:
  119. </p>
  120. <ul>
  121. <li><a href="https://api.jquery.com/event.pageX/">pageX</a>, <a href="https://api.jquery.com/event.pageY/">pageY</a>: Devuelve la posición del ratón en el momento que ocurre el evento relative a la parte superior izquierda de la página.</li>
  122. <li><a href="https://api.jquery.com/event.type/">type</a>: El tipo de evento, por ejemplo “click”.</li>
  123. <li><a href="https://api.jquery.com/event.which/">which</a>: El botón o tecla que fue pulsado.</li>
  124. <li><a href="https://api.jquery.com/event.data/">data</a>: Cualquier dato que se pase cuando el evento se fija al elemento.</li>
  125. <li><a href="https://api.jquery.com/event.target/">target</a>: El elemento DOM que inicia el evento.</li>
  126. <li><a href="https://api.jquery.com/event.preventDefault/">preventDefault()</a>: Evita la acción predeterminada de un evento, por ejemplo, abrir un enlace.</li>
  127. <li><a href="https://api.jquery.com/event.stopPropagation/">stopPropagation()</a>: Evita que el evento se propague a otros elementos de mayor jerarquía en el árbol DOM.</li>
  128. </ul>
  129. <p>Aquí podemos ver en acción ".preventDefault()".</p>
  130. <a href="www.google.com" id="google">Ve a la página de inicio de Google</a>
  131. <pre>
  132. <code>
  133. $(function() {
  134. $( "#google" ).click(function( event ) {
  135. event.preventDefault();
  136. alert("NO");
  137. });
  138. });
  139. </code>
  140. </pre>
  141. <br>
  142. <h3>Añadiendo Eventos a Nuevos Elementos de la Página</h3>
  143. <p>Es importante tener en cuenta que .on () sólo puede crear listeners
  144. de eventos en elementos que existen al momento de configurar los
  145. listeners. Elementos similares creados después de que se establezcan
  146. los listeners de eventos no capturarán automáticamente los eventos
  147. que se hayan configurado anteriormente. Por ejemplo:
  148. </p>
  149. <pre>
  150. <code>
  151. $( document ).ready(function(){
  152. // Creamos un evento click en todos los button con class alert
  153. // que existen en el DOM en el momento de que la instrucción se ejecute
  154. $(".alert").click(function(){
  155. alert("Has pulsado un botón con alert jeje");
  156. // Ahora se crea un nuevo elemento button con alert class
  157. // Pero al haberse creado después, no tiene el mismo evento asociado
  158. $( "&lt;button class='alert'&gt;Alert!&lt;/button&gt;" ).appendTo( "#alert-buttons" );
  159. });
  160. });
  161. </code>
  162. </pre>
  163. <br>
  164. <div id="alert-buttons">
  165. <button class="alert">Púlsame</button>
  166. </div>
  167. <p>Por ello es importante que veamos a continuación la Delegación de Eventos</p>
  168. <h3>Delegación de Eventos</h3>
  169. <p>La Delegación de Eventos permitirá asociar un listener de evento a
  170. un elemento padre que se disparará para todos los descendientes que
  171. coincide con el selector, aunque esos descendientes existan ahora o
  172. en el futuro.
  173. </p>
  174. <pre>
  175. <code>
  176. $( document ).ready(function(){
  177. $( "#alert-buttons2" ).on( "click", ".alert2", function() {
  178. alert("Has pulsado un botón con alert jeje");
  179. $( "&lt;button class='alert2'&gt;Alert!&lt;/button&gt;" ).appendTo( "#alert-buttons2" );
  180. });
  181. });
  182. </code>
  183. </pre>
  184. <br>
  185. <div id="alert-buttons2">
  186. <button class="alert2">Púlsame mucho</button>
  187. </div>
  188. <h3>Eventos de usar y tirar</h3>
  189. <p>A veces se necesita algún tipo de evento que solo se vaya a usar una vez.
  190. Para ello en vez de utilizar un contador o algún tipo de variable booleana
  191. podemos utilizar el método <a href="http://api.jquery.com/one/">"one()"</a>.
  192. </p>
  193. <pre>
  194. <code>
  195. $( document ).ready(function(){
  196. $( "p" ).one( "click", function() {
  197. alert("Solo me puedes pulsar una vez, lo siento");
  198. });
  199. });
  200. </code>
  201. </pre>
  202. <br>
  203. <button id="b-unico">Este botón es único</button>
  204. <br>
  205. <h3>Cambiando la funcionalidad</h3>
  206. <p>Otra funcionalidad puede ser que después de un primer uso, a este elemento
  207. se le pueda asociar otro tipo de evento.
  208. </p>
  209. <pre>
  210. <code>
  211. $( document ).ready(function(){
  212. $( "#b-nounico" ).one( "click", firstClick);
  213. });
  214. function firstClick() {
  215. alert( "Me puedes pulsar más veces!!!!!" );
  216. // Ahora creamos un nuevo controlador para el botón
  217. $( this ).click( function() { alert( "Te lo dije, púlsame todas las veces que quieras!" ); } );
  218. }
  219. </code>
  220. </pre>
  221. <br>
  222. <button id="b-nounico">Este botón no de un solo uso</button>
  223. <h3>Desvincular Eventos</h3>
  224. <p>Para eliminar un evento de un element se usa el método “.off()” y se
  225. pasa al evento que queramos.
  226. </p>
  227. <pre>
  228. <code>
  229. $( document ).ready(function(){
  230. $( "#hola-b" ).click(holaClase);
  231. $("#poner-hola").click(function() {
  232. $("#hola-b").on("click", holaClase);
  233. });
  234. $("#quitar-hola").click(function() {
  235. $("#hola-b").off("click");
  236. });
  237. });
  238. function holaClase() {
  239. alert("Hola");
  240. }
  241. </code>
  242. </pre>
  243. <br>
  244. <button id="hola-b">Hola</button>
  245. <button id="poner-hola">Poner el Hola</button>
  246. <button id="quitar-hola">Quitar el Hola</button>
  247. <br>
  248. <br>
  249. <p>Como ".on()" se puede desvincular varios eventos de un elemento.</p>
  250. <pre>
  251. <code>
  252. $( document ).ready(function(){
  253. $( "#hola-b2" ).click(holaClase).mouseenter(holaClase);
  254. $("#poner-hola2").click(function() {
  255. $("#hola-b2").on("click", holaClase);
  256. });
  257. $("#quitar-hola2").click(function() {
  258. $("#hola-b2").off("click mouseenter");
  259. });
  260. });
  261. function holaClase() {
  262. alert("Hola");
  263. }</code>
  264. </pre>
  265. <br>
  266. <button id="hola-b2">Hola</button>
  267. <button id="poner-hola2">Poner el Hola</button>
  268. <button id="quitar-hola2">Quitar el Hola</button>
  269. <br>
  270. <h3>Event Helpers</h3>
  271. <p>jQuery ofrece funciones auxiliares que sirve para facilitar el uso de
  272. los métodos ya implementados. En este caso, la función auxiliar es
  273. <a href="https://api.jquery.com/hover/">“.hover()”</a>.
  274. </p>
  275. <h5>.hover()</h5>
  276. <p>Este método te permite pasar una o dos funciones que se activarán con
  277. los eventos mouseenter y mouseleave de un elemento. Si pasas una función,
  278. los dos eventos activarán la función, pero si pasas dos funciones,
  279. la primera será ejecutada con mouseenter y la segunda con mouseleave.
  280. </p>
  281. <ul>
  282. <li class="onefun">Este item de la lista tiene asociada una función.</li>
  283. <li class="onefun">Este item de la lista tiene asociada una función.</li>
  284. <li class="twofun">Pero este tiene asociado dos funciones.</li>
  285. <li class="twofun">Pero este tiene asociado dos funciones.</li>
  286. </ul>
  287. <pre>
  288. <code>
  289. $( document ).ready(function(){
  290. $( ".onefun" ).hover(function() {
  291. $( this ).fadeOut( 100 );
  292. $( this ).fadeIn( 500 );
  293. });
  294. $( ".twofun" ).hover(
  295. function() {
  296. $( this ).append( $( "<span> ***</span>" ));
  297. }, function() {
  298. $( this ).find( "span:last" ).remove();
  299. }
  300. );
  301. });
  302. }</code>
  303. </pre>
  304. <br>
  305. </div>
  306. <script src="../jQueryProject/assets/js/events.js"></script>