SlideShare ist ein Scribd-Unternehmen logo
1 von 51
Downloaden Sie, um offline zu lesen
jQuery




     Jesús María Méndez Pérez
     Grupo de Apoyo a la Teleenseñanza (GAT)
Introducción
• Es una librería Javascript que:
  – elimina las diferencias entre los distintos
    navegadores web
  – simplifica tareas comunes
  – es amigable para los diseñadores web
  – tiene una gran cantidad de plugins
    (http://archive.plugins.jquery.com)
  – es usado en más del 35% de los sitios webs
Características
• jQuery es la librería Javascript más utilizada
  actualmente.
• Ha tenido un gran crecimiento durante estos
  últimos años.
• jQuery es usado en más del 50% de los 10,000
  sitios top de Internet y en más del 30% del top
  1,000,000.
Uso jQuery
Historia

• John Resig lanzó jQuery approximadamente el 16 de Enero
  de 2006
• John escribió en su blog – “Making it to both del.icio.us
  popular and the front page of digg just shows how badly
  Javascript programmers want a better library for writing
  code with.”
• Justo una semana después Michael Geary escribió el primer
  plugin jQuery, una función para manipular JSON que se
  incluiría posteriormente en la librería jQuery.
• Version 1.0 - 26 de Agosto de 2006.
• Actualmente - Versión 1.8.3 - 13 de Noviembre de 2012.
Cargar jQuery
<!DOCTYPE html>
<html>
<head>
<meta charset="utf:8">
<title>My Web Page</title>
<link href="css/main.css rel="stylesheet">
<script src="js/jquery/1.8.3.min.js"></script>
</head>
<body>

…
</script>
     $(document).ready(function() {
     });
</script>
</body>

O bien…
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
Programando en jQuery
1. Seleccionar       2. Acción

images               show
links                hide
divs                 animate
tables               add new content
table rows           change CSS
form fields          change HTML properties
External links       load data from the web
… any HTML TAG
Programando en jQuery
http://api.jquery.com/category/selectors/

$('p')
$('.navbar')
$('#banner')
$('#banner p')
$('h2 + p')
$('a[href^="http://"]')

http://files.sawmac.com/js2e/testbed/selectors.html
Programando en jQuery
1. Seleccionar                                        2. Acción

$('a[href^="http://"]').attr('target','_blank');      $('a[href^="http://"]').attr('target','_blank');

<li>                                                  <li>
<a href="http://google.com/">Google</a>               <a href="http://google.com/" target="_blank") >Google</a>
</li>                                                 </li>
<li>                                                  <li>
<a href="http://yahoo.com">Yahoo!</a>                 <a href="http://yahoo.com" target="_blank") >Yahoo!</a>
</li>                                                 </li>
<li>                                                  <li>
<a href="../testbed/events.html">Events testbed</a>   <a href="../testbed/events.html "target="_blank") >Events
</li>                                                 testbed</a>
<li>                                                  </li>
<a href="http://twitter.com">Twitter</a>              <li>
</li>                                                 <a href="http://twitter.com">Twitter</a>
                                                      </li>
Interacción - Eventos

Mouse events   mouseover   mouseout   mousemove

Click events   click       dbclick    mousedown   mouseup

Window         load        unload     resize      scroll
events
Key events     keydown     keyup      keypress

Form events    focus       blur       submit
Programando en jQuery
• 1. Seleccionar elemento
      $(‘div’)


• 2. Añadir Evento
      $(‘div').click(function(){
      });


• 3. Acción
      $(‘div').click(function(){
            alert(‘hola');
      });
jQuery Effects
Buenas prácticas
• Usar SIEMPRE la última versión de jQuery
   – Mejora el rendimiento y corrige errores de versiones
     anteriores.


• Precaución al seleccionar selectores
   – De mayor a menor rendimiento:
      •   Selectores de ID: (#sidebar)
      •   Selectores de etiqueta HTML (input, div, etc.)
      •   Selectores de clase (.pantalon)
      •   Pseudoselectores y selectores de atributo (:visible, :hidden,
          [attribute=value], etc.)
Hazlo simple
• Evita selectores complicados
  $("body #page:first-child article.main p#intro em"); //mal
  $("#intro em"); //bien



• Aumento especificación de izquierda a derecha
  $("#intro em") -> Carga todos los elementos ‘em’ en un array.

  Muy ineficiente si tienes cientos de etiquetas ‘em’.

  $("em", $("#intro")); -> $("em", "#intro");
  $("#intro").find("em");
<div id="content">
       <form method="post" action="/">
                <h2>Traffic Light</h2>
                               <ul id="traffic_light">
                                                 <li><input type="radio" class="on" name="light" value="red" /> Red</li>
                                                 <li><input type="radio" class="off" name="light" value="yellow" /> Yellow</li>
                                                 <li><input type="radio" class="off" name="light" value="green" /> Green</li>
                               </ul>
               <input class="button" id="traffic_button" type="submit" value="Go" />
        </form>
      </div>


Seleccionar un elemento
              var traffic_button = $('#content .button'); //lento
              var traffic_button = $('#traffic_button'); //rápido


Seleccionar múltiples elementos
      –    Siempre descender del ID más cercano (var traffic_lights = $('#traffic_light input');)
      –    Siempre utilizar una etiqueta antes de una clase (y descender de un ID):
                      var active_light = $('#traffic_light input.on');
      –    Nunca utilices etiqueta con un ID.
                               var content = $('div#content');


      –    Consejo: Si queremos recordar que nuestra variable local es un objeto jQuery podemos ponerle $ como prefijo.
      –    Nunca repitas una operación de selección de jQuery mas de una vez en tu aplicación.
Separar la funcionalidad de Javascript
Separar la funcionalidad de Javascript en otra capa independiente de (X)HTML and CSS.
//mal
Nunca incluyas eventos Javascript en los atributos.

         <a onclick="doSomething()" href="#">Click!</a>

//bien
El código Javascript se debe de incluir en un fichero externo y enlazado al documento con la etiqueta ‘<script>’

                <a href="backuplink.html" class="doSomething">Click!</a>


                $('a.doSomething').click(function(){
                            // Do something here!
                            alert('You did something, woo hoo!');
                }); ...


The método .click() de jQuery nos permite enlazar el evento click al resultado de nuestro selector.
Se seleccionarán todas las etiquetas <a> con clase “doSomething” y se le enlazará el evento que llamará a la
función.
Nunca depender de Javascript
Nunca asumir que el navegador del usuario tiene Javascript activado.

//mal
         <script language="javascript">
         var now = new Date();
         if(now.getHours() < 12)
                  document.write('Good Morning!');
         else
                  document.write('Good Afternoon!');
         </script>

Javascript desactivado -> No aparecería nada.

//bien
         <p title="Good Day Message">Good Morning!</p>

         <script language="javascript">
         var now = new Date();
           if(now.getHours() >= 12)
         {
                    var goodDay = $('p[title="Good Day Message"]');
                   goodDay.text('Good Afternoon!');
         }

Javascript desactivado -> Siempre aparecería “Good Morning”
Código accessible
Importante que nuestro (X)HTML esté bien estructurado para evitar DOM scripting e interactuar de manera
sencilla con jQuery.

//muy mal                                                   //mal




                                                  //bien
CSS Dinámico
Si el navegador web no soporta Javascript o éste está desactivado, los elementos que ocultamos a través
de CSS nunca serán nuevamente visibles ya que nuestro código Javascript no se ejecutará.

Podemos ocultar elementos de la página usando usando CSS, sin embargo nuestro CSS solo se ejecutará
si el Javascript está activado.

#bad                                                                          #good
HTML:                                                                         HTML:

<h2>This is a heading</h2>                                                    <h2>This is a heading</h2>
 <p class="hide-me-first"> This is some information about the heading. </p>   <p class="hide-me-first"> This is some information about the heading. </p>



CSS:                                                                           jQuery Javascript:
p.hide-me-first                                                               $(document).ready(function{
{                                                                                               $("p.hide-me-first").css("display", "none");
        display: none;                                                                          $("p.hide-me-first").css("visibility", "hidden");
        visibility: hidden;
}                                                                             });
Almacenar consultas jQuery
Si pretendes usar los objetos jQuery obtenidos durante la selección en otras partes del código,
deberías almacenarlo en un objeto de ámbito global.

    // Definir un objeto de ámbito global (i.e. the window object)
     window.$my =
    {
              // Initialize all the queries you want to use more than once
              head : $('head'),
              traffic_light : $('#traffic_light'),
              traffic_button : $('#traffic_button')
    };

    function do_something()
     {
           // Now you can reference the stored results and manipulate them
           var script = document.createElement('script');
           $my.head.append(script);

          // When working inside functions, continue to save jQuery results to your global container.
          $my.cool_results = $('#some_ul li');
          $my.other_results = $('#some_table td'); // Use the global functions as you would a normal jQuery result
          $my.other_results.css('border-color', 'red');
          $my.traffic_light.css('border-color', 'green');
    }
•   1) $(‘.child’, $parent).show(); (Ámbito)
•   2) $parent.find(‘.child’).show(); (Usando find())
•   3) $parent.children(‘child’).show(); (hijo inmediato)
•   4) $(‘parent > .child’).show(); (selector CSS)
•   5) $(‘#parent .child’).show(); (igual que 2)
• Caching
     var parents = $(‘.parents’);

     var children = $(‘.parents’).find(‘.child’) //mal
     var children = parents.find(‘.child’) //bien


Cualquier $(‘ ’) implica volver a recorrer el DOM -> Mayor lentitud (Menor rendimiento)

• Encadenamiento
     //sin encadenamiento
     $(‘#message’).fadeIn(‘slow’);
     $(‘#message’).addClass(‘activeMessage’);

     //con encadenamiento
     $(‘#message’).fadeIn(‘slow’)
                  .addClass(‘activeMessage’);
• Inserción en el DOM
   –   Cada inserción en el DOM es muy costosa.
   –   Construir cadenas de HTML en una variable y realizar una única inserción (append()) tan tarde como
       sea posible.
   –   Usar detach() en vez de remove() si posteriormente se va a hacer una reinserción de los elementos
       en el DOM.

• Evitar bucles
   –   La manipulación directa del DOM es muy costosa.
   –   Crear lo que necesites en memoria y por último actualizar el DOM.

         //mal                                                             //bien
Objetos jQuery como Arrays
El resultado de un selector es un objeto jQuery. Sin embargo, te hace pensar que estás trabajando
con un array con elementos y una longitud.




Usar for (o while) en lugar de $.each() hace que mejore el rendimiento.
Comprobar la longitud es la única manera de determinar si la colección contiene algún elemento




http://jsfiddle.net/martinaglv/NcRsV/
Delegación de eventos (Bubbling)
Cada evento (e.g. click, mouseover, etc.) en JavaScript hace el efecto burbuja en el árbol DOM
hacia los elementos padre.

Muy útil cuando muchos elementos llaman a la misma función. En vez de establecer una función
de listener a muchos nodos (ineficiente), se establece una función de listener a su padre.
Mantén el código claro
var defaultSettings = {};
defaultSettings['carModel'] = 'Mercedes';
defaultSettings['carYear'] = '2010';
defaultSettings['carMiles'] = '5000';
defaultSettings['carTint'] = 'Metallic Blue';

$('.someCheckbox').click(function(){                                          $(‘.someCheckbox’).click(function(){

          if(this.checked){                                                         var checked= this.checked;
                        $('#input_carModel').val(defaultSettings.carModel);
                        $('#input_carYear').val(defaultSettings.carYear);           $.each([‘carModel’, ‘carYear’, ‘carMiles’, ‘carTint’, function (i,key) {
                        $('#input_carMiles').val(defaultSettings.carMiles);                  $(#input_ + key).val(checked ? defaultSettings[key] : ‘’);
                        $('#input_carTint').val(defaultSettings.carTint);           });
          }                                                                   });
          else
          {
                        $('#input_carModel').val('');
                        $('#input_carModel').val('');
                        $('#input_carModel').val('');
                        $('#input_carModel').val('');
      }
});
Usar CSS Hooks
La API CSS hooks permite a los desarrolladores obtener y establecer particular valores CSS.

               $.cssHooks['borderRadius'] = {
                    get: function(elem, computed, extra){
                       // Depending on the browser, read the value of
                       // -moz-border-radius, -webkit-border-radius or border-radius
                    },
                    set: function(elem, value){
                       // Set the appropriate CSS3 property
                    }
               };

               // Use it without worrying which property the browser actually understands:
               $('#rect').css('borderRadius',5);



https://github.com/brandonaaron/jquery-cssHooks -> Colección de CSS Hooks
Usar Custom Easing Functions
El plugin jQuery easing plugin permite añadir efectos a tus animaciones.

Copiar el efecto que necesitas del plugin y añadirlo a jQuery.easing

         $.easing.easeInOutQuad = function (x, t, b, c, d)
         {
                if ((t/=d/2) < 1)
                           return c/2*t*t + b;
                return -c/2 * ((--t)*(t-2) - 1) + b;
         };

          // To use it: $('#elem').animate({width:200},'slow','easeInOutQuad');
$.proxy()

                                                      //Ejecutar




•   Problema: Desaparece el botón pero no el panel.
•   Utilizando $.proxy:
Determinar el tamaño de tu página web
• Cuanto más contenido tenga tu página web, más le costará al navegador
  renderizarla.
• Puedes contar el numero de elementos DOM mediante:

        console.log( $('*').length );

• Intenta optimizarla eliminando nodos innecesarios.
Ámbito
•   El problema del ámbito




Sólo se está alterando el DOM una vez la página esté cargada.
En casi cualquier aplicación web moderna, el DOM va a cambiar después de que la página haya sido cargada.

Ejecutando jQuery dentro de success de una función AJAX:
•     Como manejar el ámbito




A la izquierda, se establece el handler de la manera normal. A la derecha, se realiza una búsqueda de la clase botón en el documento.
La de la derecha te permite controlar el ámbito sobre el DOM que está siendo modificado.




Dada esta función, se reescribe $(document).ready(fuction(){

Y la llamada AJAX de una manera similar:
•   Cuando se rompe el ámbito

    La variable scope solo será válida dentro de la función my_button_jquery. Es importante tener en cuenta que este ámbito se romperá
    si realizamos una llamada a otra función. Naturaleza asíncrona del modelo de eventos de Javascript.

    Por eso, la función AJAX anterior no es posible escribirla con scope dentro del manejador success.




•   Eficiencia

    Siempre debes invocar el objeto jQuery desde fuera de la función para mejorar la eficiencia.

             //mal                                                                            //bien
Establecer AJAX Global
En una petición AJAX, algunas veces necesitas indicar que la petición está en progreso
(mostrar animación, capa más oscura, etc.)
Usar HTML5 Data Attributes
•   HTML5 data attributes son utilizados para almacenar información en la página
    web.




•   Para acceder a los atributos del div:




•   http://api.jquery.com/data/
Crear un plugin en jQuery
(function($){
           $.fn.yourPluginName = function(){ … return this; };
})( jQuery);

$(“p”).yourPluginName();



                                                                 Fichero jquery.reversetext.js
Crear un plugin en jQuery
HTML:




Resultado:
Comprimir tu Javascript
•   Comprimir el código Javascript usando YUICompressor
•   Menor tiempo de respuesta -> Agilizamos la carga del página web.

•   Otros compresores de Javascript:
     –   http://javascriptcompressor.com/
     –   http://jscompress.com/



•   También podemos comprimir nuestro código CSS
     –   http://www.cssdrive.com/index.php/main/csscompressor/
jQuery mobile
• http://jquerymobile.com/ - Versión 1.2.0

• Librería Mobile UI.
• HTML5 Data Atributtes definidos.
         <div data-role="page" id="home">
         </div>

<link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" />
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>
<ul data-role="listview" data-inset="true" data-filter="true">
    <li><a href="#">Acura</a></li>
    <li><a href="#">Audi</a></li>
    <li><a href="#">BMW</a></li>
    <li><a href="#">Cadillac</a></li>
    <li><a href="#">Ferrari</a></li>
</ul>




http://jquerymobile.com/demos/1.2.0/docs/about/getting-started.html
jQuery mobile – Buenas prácticas

a) Mirar detenidamente los ejemplos
   – http://jquerymobile.com/demos/
b) Cada página debe de valerse por sí misma
   – Debe contener: CSS, Javascript, header, footer, etc.
c) Comprobar que ocurre cuando desactivas Javascript
d) Asegúrate de que tu código no sea vulnerable a los
ataques
jQuery mobile – Buenas prácticas
• Minimizar y comprimir
  – Reducir el número de peticiones HTTP
  – Minimizar los ficheros CSS y Javascript
  – Intentar que las páginas webs sean menores de
    25KB (para que sea posible el uso de la caché)
  – Utilizar la herramienta YUI Compressor
jQuery mobile – Buenas prácticas
• Números de teléfono, mapas y correos
  electrónicos
  – No embeber mapas en las aplicaciones móviles
jQuery mobile – Buenas prácticas
• Usar jQuery Validate
  –   http://bassistance.de/jquery-plugins/jquery-plugin-validation/
  –   No hay que confiar en el usuario.
jQuery mobile – Buenas prácticas
• Usar ThemeRoller
  – http://jquerymobile.com/themeroller/

• Usar radio button en lugar de select
  – Select son menos consistentes, suelen dar más problemas entre las plataformas.
  – Permiten al usuario ver al instante las opciones de elección.
jQuery mobile – Buenas prácticas
• Añadir Google Analytics
jQuery mobile – Buenas prácticas
• Usar correctamente las etiquetas meta

• Determinar que estilo de navegación usar:
  – La página principal es el menú global
  – El menú global es una subpágina
  – El menú global está al final de cada página
La página principal es el menú global       El menú global es una subpágina




•   Pros                                •   Pros
     – Simple                                – Escalable
     – Buena UX                              – Contexto
     – Velocidad                             – Velocidad
•   Contras                             •   Contras
     – Demasiados enlaces                    – Cuestionable UX
El menú global está al final de cada página




     •   Pros
          –   Escalable
          –   Velocidad
          –   Contexto
          –   Excelente UX
     •   Contras
          – Aplicaciones no usan esta interfaz
jQuery mobile – Buenas prácticas
• Detectar y redireccionar a móvil
  – Browser sniffing - WURFL


• Establecer un enlace a la página completa

• Contenido vs Funcionalidad
GRACIAS

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Charla Jquery
Charla JqueryCharla Jquery
Charla Jquery
 
Manual de jquery en pdf desarrollowebcom
Manual de jquery en pdf desarrollowebcomManual de jquery en pdf desarrollowebcom
Manual de jquery en pdf desarrollowebcom
 
Introducción a prototype javascript
Introducción a prototype javascriptIntroducción a prototype javascript
Introducción a prototype javascript
 
Modelo vista controlador
Modelo vista controladorModelo vista controlador
Modelo vista controlador
 
HTML DOM Events
HTML DOM EventsHTML DOM Events
HTML DOM Events
 
jQuery 1.3 UI eghost Julio2009
jQuery 1.3 UI eghost Julio2009jQuery 1.3 UI eghost Julio2009
jQuery 1.3 UI eghost Julio2009
 
Javascript Clásico
Javascript ClásicoJavascript Clásico
Javascript Clásico
 
Unidad 3 AJAX
Unidad 3 AJAX Unidad 3 AJAX
Unidad 3 AJAX
 
Julissa huaman hilari
Julissa huaman hilariJulissa huaman hilari
Julissa huaman hilari
 
Guia jQuery INCES Militar - Kurt Gude
Guia jQuery INCES Militar - Kurt GudeGuia jQuery INCES Militar - Kurt Gude
Guia jQuery INCES Militar - Kurt Gude
 
Clase 12 jQuery basico
Clase 12  jQuery basicoClase 12  jQuery basico
Clase 12 jQuery basico
 
Tutorial de jquery
Tutorial de jqueryTutorial de jquery
Tutorial de jquery
 
Introducción a Flask
Introducción a FlaskIntroducción a Flask
Introducción a Flask
 
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
 
Introduccion silverlight
Introduccion silverlightIntroduccion silverlight
Introduccion silverlight
 
Introducción a DJango
Introducción a DJangoIntroducción a DJango
Introducción a DJango
 
Trabajo dirigido daw con código
Trabajo dirigido daw con códigoTrabajo dirigido daw con código
Trabajo dirigido daw con código
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
dajaxproject.com
dajaxproject.comdajaxproject.com
dajaxproject.com
 
Los lenguajes de la web
Los lenguajes de la webLos lenguajes de la web
Los lenguajes de la web
 

Andere mochten auch

Andere mochten auch (19)

En 20 minutos ... Técnicas SEO - Mejorando la Visibilidad de nuestra Web
En 20 minutos ... Técnicas SEO - Mejorando la Visibilidad de nuestra WebEn 20 minutos ... Técnicas SEO - Mejorando la Visibilidad de nuestra Web
En 20 minutos ... Técnicas SEO - Mejorando la Visibilidad de nuestra Web
 
Notimovil
NotimovilNotimovil
Notimovil
 
MEDEA contada a los alumnos de Grado de Ingeniería Informática
MEDEA contada a los alumnos de Grado de Ingeniería InformáticaMEDEA contada a los alumnos de Grado de Ingeniería Informática
MEDEA contada a los alumnos de Grado de Ingeniería Informática
 
En 20 minutos ... Tests de Aceptación con Cucumber
En 20 minutos ... Tests de Aceptación con CucumberEn 20 minutos ... Tests de Aceptación con Cucumber
En 20 minutos ... Tests de Aceptación con Cucumber
 
En 20 minutos ... Como se hizo LooWID.com
En 20 minutos ... Como se hizo LooWID.comEn 20 minutos ... Como se hizo LooWID.com
En 20 minutos ... Como se hizo LooWID.com
 
LOGATICA
LOGATICALOGATICA
LOGATICA
 
Pórtico
PórticoPórtico
Pórtico
 
En 20 minutos ... Charla selenium
En 20 minutos ... Charla seleniumEn 20 minutos ... Charla selenium
En 20 minutos ... Charla selenium
 
En 20 minutos ... HTML5 + CSS3
En 20 minutos ... HTML5 + CSS3En 20 minutos ... HTML5 + CSS3
En 20 minutos ... HTML5 + CSS3
 
Medea. Metodología de desarrollo en ÁTICA
Medea. Metodología de desarrollo en ÁTICAMedea. Metodología de desarrollo en ÁTICA
Medea. Metodología de desarrollo en ÁTICA
 
En 20 minutos ... Arquitectura Oracle
En 20 minutos ... Arquitectura OracleEn 20 minutos ... Arquitectura Oracle
En 20 minutos ... Arquitectura Oracle
 
En 20 minutos ... jBPM
En 20 minutos ... jBPMEn 20 minutos ... jBPM
En 20 minutos ... jBPM
 
En 20 minutos ... Sonar Qube: cómo de bueno es el código de tu proyecto
En 20 minutos ... Sonar Qube: cómo de bueno es el código de tu proyectoEn 20 minutos ... Sonar Qube: cómo de bueno es el código de tu proyecto
En 20 minutos ... Sonar Qube: cómo de bueno es el código de tu proyecto
 
En 20 minutos ... Charla drools
En 20 minutos ... Charla droolsEn 20 minutos ... Charla drools
En 20 minutos ... Charla drools
 
Experiencia de Usuario (UX)
Experiencia de Usuario (UX)Experiencia de Usuario (UX)
Experiencia de Usuario (UX)
 
En 20 minutos... Buenas Practicas SSL
En 20 minutos... Buenas Practicas SSLEn 20 minutos... Buenas Practicas SSL
En 20 minutos... Buenas Practicas SSL
 
Auditoria en BD de las Sesiones Web
Auditoria en BD de las Sesiones WebAuditoria en BD de las Sesiones Web
Auditoria en BD de las Sesiones Web
 
En 20 minutos ... Responsive Design
En 20 minutos ... Responsive DesignEn 20 minutos ... Responsive Design
En 20 minutos ... Responsive Design
 
En 20 minutos ... Chrome Developer Tools
En 20 minutos ... Chrome Developer ToolsEn 20 minutos ... Chrome Developer Tools
En 20 minutos ... Chrome Developer Tools
 

Ähnlich wie En 20 minutos ... jQuery (20)

Javascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryJavascript en proyectos reales: jQuery
Javascript en proyectos reales: jQuery
 
Phonegap
PhonegapPhonegap
Phonegap
 
Jquery para principianes
Jquery para principianesJquery para principianes
Jquery para principianes
 
J M E R L I N P H P
J M E R L I N P H PJ M E R L I N P H P
J M E R L I N P H P
 
JqueryMobile
JqueryMobile JqueryMobile
JqueryMobile
 
Taller de Jquery
Taller de JqueryTaller de Jquery
Taller de Jquery
 
Unidad3ajax
Unidad3ajaxUnidad3ajax
Unidad3ajax
 
Jquery
JqueryJquery
Jquery
 
JQuery-Tema 1
JQuery-Tema 1JQuery-Tema 1
JQuery-Tema 1
 
De HTML a Express
De HTML a ExpressDe HTML a Express
De HTML a Express
 
Guiajquery
GuiajqueryGuiajquery
Guiajquery
 
JQuery
JQueryJQuery
JQuery
 
Curso de HTML5
Curso de HTML5Curso de HTML5
Curso de HTML5
 
Examen 2° grado primer bimestre
Examen 2° grado primer bimestreExamen 2° grado primer bimestre
Examen 2° grado primer bimestre
 
Python scraping
Python scrapingPython scraping
Python scraping
 
DocumentacióN Del Sitio Web En Xml
DocumentacióN Del Sitio Web En XmlDocumentacióN Del Sitio Web En Xml
DocumentacióN Del Sitio Web En Xml
 
Estándares Web con Chico UI
Estándares Web con Chico UIEstándares Web con Chico UI
Estándares Web con Chico UI
 
J query
J queryJ query
J query
 
Introducción a AngularJS
Introducción a AngularJS Introducción a AngularJS
Introducción a AngularJS
 
Intro Jquery
Intro JqueryIntro Jquery
Intro Jquery
 

Kürzlich hochgeladen

LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 

Kürzlich hochgeladen (20)

LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 

En 20 minutos ... jQuery

  • 1. jQuery Jesús María Méndez Pérez Grupo de Apoyo a la Teleenseñanza (GAT)
  • 2. Introducción • Es una librería Javascript que: – elimina las diferencias entre los distintos navegadores web – simplifica tareas comunes – es amigable para los diseñadores web – tiene una gran cantidad de plugins (http://archive.plugins.jquery.com) – es usado en más del 35% de los sitios webs
  • 3. Características • jQuery es la librería Javascript más utilizada actualmente. • Ha tenido un gran crecimiento durante estos últimos años. • jQuery es usado en más del 50% de los 10,000 sitios top de Internet y en más del 30% del top 1,000,000.
  • 5. Historia • John Resig lanzó jQuery approximadamente el 16 de Enero de 2006 • John escribió en su blog – “Making it to both del.icio.us popular and the front page of digg just shows how badly Javascript programmers want a better library for writing code with.” • Justo una semana después Michael Geary escribió el primer plugin jQuery, una función para manipular JSON que se incluiría posteriormente en la librería jQuery. • Version 1.0 - 26 de Agosto de 2006. • Actualmente - Versión 1.8.3 - 13 de Noviembre de 2012.
  • 6. Cargar jQuery <!DOCTYPE html> <html> <head> <meta charset="utf:8"> <title>My Web Page</title> <link href="css/main.css rel="stylesheet"> <script src="js/jquery/1.8.3.min.js"></script> </head> <body> … </script> $(document).ready(function() { }); </script> </body> O bien… <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
  • 7. Programando en jQuery 1. Seleccionar 2. Acción images show links hide divs animate tables add new content table rows change CSS form fields change HTML properties External links load data from the web … any HTML TAG
  • 8. Programando en jQuery http://api.jquery.com/category/selectors/ $('p') $('.navbar') $('#banner') $('#banner p') $('h2 + p') $('a[href^="http://"]') http://files.sawmac.com/js2e/testbed/selectors.html
  • 9. Programando en jQuery 1. Seleccionar 2. Acción $('a[href^="http://"]').attr('target','_blank'); $('a[href^="http://"]').attr('target','_blank'); <li> <li> <a href="http://google.com/">Google</a> <a href="http://google.com/" target="_blank") >Google</a> </li> </li> <li> <li> <a href="http://yahoo.com">Yahoo!</a> <a href="http://yahoo.com" target="_blank") >Yahoo!</a> </li> </li> <li> <li> <a href="../testbed/events.html">Events testbed</a> <a href="../testbed/events.html "target="_blank") >Events </li> testbed</a> <li> </li> <a href="http://twitter.com">Twitter</a> <li> </li> <a href="http://twitter.com">Twitter</a> </li>
  • 10. Interacción - Eventos Mouse events mouseover mouseout mousemove Click events click dbclick mousedown mouseup Window load unload resize scroll events Key events keydown keyup keypress Form events focus blur submit
  • 11. Programando en jQuery • 1. Seleccionar elemento $(‘div’) • 2. Añadir Evento $(‘div').click(function(){ }); • 3. Acción $(‘div').click(function(){ alert(‘hola'); });
  • 13. Buenas prácticas • Usar SIEMPRE la última versión de jQuery – Mejora el rendimiento y corrige errores de versiones anteriores. • Precaución al seleccionar selectores – De mayor a menor rendimiento: • Selectores de ID: (#sidebar) • Selectores de etiqueta HTML (input, div, etc.) • Selectores de clase (.pantalon) • Pseudoselectores y selectores de atributo (:visible, :hidden, [attribute=value], etc.)
  • 14. Hazlo simple • Evita selectores complicados $("body #page:first-child article.main p#intro em"); //mal $("#intro em"); //bien • Aumento especificación de izquierda a derecha $("#intro em") -> Carga todos los elementos ‘em’ en un array. Muy ineficiente si tienes cientos de etiquetas ‘em’. $("em", $("#intro")); -> $("em", "#intro"); $("#intro").find("em");
  • 15. <div id="content"> <form method="post" action="/"> <h2>Traffic Light</h2> <ul id="traffic_light"> <li><input type="radio" class="on" name="light" value="red" /> Red</li> <li><input type="radio" class="off" name="light" value="yellow" /> Yellow</li> <li><input type="radio" class="off" name="light" value="green" /> Green</li> </ul> <input class="button" id="traffic_button" type="submit" value="Go" /> </form> </div> Seleccionar un elemento var traffic_button = $('#content .button'); //lento var traffic_button = $('#traffic_button'); //rápido Seleccionar múltiples elementos – Siempre descender del ID más cercano (var traffic_lights = $('#traffic_light input');) – Siempre utilizar una etiqueta antes de una clase (y descender de un ID): var active_light = $('#traffic_light input.on'); – Nunca utilices etiqueta con un ID. var content = $('div#content'); – Consejo: Si queremos recordar que nuestra variable local es un objeto jQuery podemos ponerle $ como prefijo. – Nunca repitas una operación de selección de jQuery mas de una vez en tu aplicación.
  • 16. Separar la funcionalidad de Javascript Separar la funcionalidad de Javascript en otra capa independiente de (X)HTML and CSS. //mal Nunca incluyas eventos Javascript en los atributos. <a onclick="doSomething()" href="#">Click!</a> //bien El código Javascript se debe de incluir en un fichero externo y enlazado al documento con la etiqueta ‘<script>’ <a href="backuplink.html" class="doSomething">Click!</a> $('a.doSomething').click(function(){ // Do something here! alert('You did something, woo hoo!'); }); ... The método .click() de jQuery nos permite enlazar el evento click al resultado de nuestro selector. Se seleccionarán todas las etiquetas <a> con clase “doSomething” y se le enlazará el evento que llamará a la función.
  • 17. Nunca depender de Javascript Nunca asumir que el navegador del usuario tiene Javascript activado. //mal <script language="javascript"> var now = new Date(); if(now.getHours() < 12) document.write('Good Morning!'); else document.write('Good Afternoon!'); </script> Javascript desactivado -> No aparecería nada. //bien <p title="Good Day Message">Good Morning!</p> <script language="javascript"> var now = new Date(); if(now.getHours() >= 12) { var goodDay = $('p[title="Good Day Message"]'); goodDay.text('Good Afternoon!'); } Javascript desactivado -> Siempre aparecería “Good Morning”
  • 18. Código accessible Importante que nuestro (X)HTML esté bien estructurado para evitar DOM scripting e interactuar de manera sencilla con jQuery. //muy mal //mal //bien
  • 19. CSS Dinámico Si el navegador web no soporta Javascript o éste está desactivado, los elementos que ocultamos a través de CSS nunca serán nuevamente visibles ya que nuestro código Javascript no se ejecutará. Podemos ocultar elementos de la página usando usando CSS, sin embargo nuestro CSS solo se ejecutará si el Javascript está activado. #bad #good HTML: HTML: <h2>This is a heading</h2> <h2>This is a heading</h2> <p class="hide-me-first"> This is some information about the heading. </p> <p class="hide-me-first"> This is some information about the heading. </p> CSS: jQuery Javascript: p.hide-me-first $(document).ready(function{ { $("p.hide-me-first").css("display", "none"); display: none; $("p.hide-me-first").css("visibility", "hidden"); visibility: hidden; } });
  • 20. Almacenar consultas jQuery Si pretendes usar los objetos jQuery obtenidos durante la selección en otras partes del código, deberías almacenarlo en un objeto de ámbito global. // Definir un objeto de ámbito global (i.e. the window object) window.$my = { // Initialize all the queries you want to use more than once head : $('head'), traffic_light : $('#traffic_light'), traffic_button : $('#traffic_button') }; function do_something() { // Now you can reference the stored results and manipulate them var script = document.createElement('script'); $my.head.append(script); // When working inside functions, continue to save jQuery results to your global container. $my.cool_results = $('#some_ul li'); $my.other_results = $('#some_table td'); // Use the global functions as you would a normal jQuery result $my.other_results.css('border-color', 'red'); $my.traffic_light.css('border-color', 'green'); }
  • 21. 1) $(‘.child’, $parent).show(); (Ámbito) • 2) $parent.find(‘.child’).show(); (Usando find()) • 3) $parent.children(‘child’).show(); (hijo inmediato) • 4) $(‘parent > .child’).show(); (selector CSS) • 5) $(‘#parent .child’).show(); (igual que 2)
  • 22. • Caching var parents = $(‘.parents’); var children = $(‘.parents’).find(‘.child’) //mal var children = parents.find(‘.child’) //bien Cualquier $(‘ ’) implica volver a recorrer el DOM -> Mayor lentitud (Menor rendimiento) • Encadenamiento //sin encadenamiento $(‘#message’).fadeIn(‘slow’); $(‘#message’).addClass(‘activeMessage’); //con encadenamiento $(‘#message’).fadeIn(‘slow’) .addClass(‘activeMessage’);
  • 23. • Inserción en el DOM – Cada inserción en el DOM es muy costosa. – Construir cadenas de HTML en una variable y realizar una única inserción (append()) tan tarde como sea posible. – Usar detach() en vez de remove() si posteriormente se va a hacer una reinserción de los elementos en el DOM. • Evitar bucles – La manipulación directa del DOM es muy costosa. – Crear lo que necesites en memoria y por último actualizar el DOM. //mal //bien
  • 24. Objetos jQuery como Arrays El resultado de un selector es un objeto jQuery. Sin embargo, te hace pensar que estás trabajando con un array con elementos y una longitud. Usar for (o while) en lugar de $.each() hace que mejore el rendimiento. Comprobar la longitud es la única manera de determinar si la colección contiene algún elemento http://jsfiddle.net/martinaglv/NcRsV/
  • 25. Delegación de eventos (Bubbling) Cada evento (e.g. click, mouseover, etc.) en JavaScript hace el efecto burbuja en el árbol DOM hacia los elementos padre. Muy útil cuando muchos elementos llaman a la misma función. En vez de establecer una función de listener a muchos nodos (ineficiente), se establece una función de listener a su padre.
  • 26. Mantén el código claro var defaultSettings = {}; defaultSettings['carModel'] = 'Mercedes'; defaultSettings['carYear'] = '2010'; defaultSettings['carMiles'] = '5000'; defaultSettings['carTint'] = 'Metallic Blue'; $('.someCheckbox').click(function(){ $(‘.someCheckbox’).click(function(){ if(this.checked){ var checked= this.checked; $('#input_carModel').val(defaultSettings.carModel); $('#input_carYear').val(defaultSettings.carYear); $.each([‘carModel’, ‘carYear’, ‘carMiles’, ‘carTint’, function (i,key) { $('#input_carMiles').val(defaultSettings.carMiles); $(#input_ + key).val(checked ? defaultSettings[key] : ‘’); $('#input_carTint').val(defaultSettings.carTint); }); } }); else { $('#input_carModel').val(''); $('#input_carModel').val(''); $('#input_carModel').val(''); $('#input_carModel').val(''); } });
  • 27. Usar CSS Hooks La API CSS hooks permite a los desarrolladores obtener y establecer particular valores CSS. $.cssHooks['borderRadius'] = { get: function(elem, computed, extra){ // Depending on the browser, read the value of // -moz-border-radius, -webkit-border-radius or border-radius }, set: function(elem, value){ // Set the appropriate CSS3 property } }; // Use it without worrying which property the browser actually understands: $('#rect').css('borderRadius',5); https://github.com/brandonaaron/jquery-cssHooks -> Colección de CSS Hooks
  • 28. Usar Custom Easing Functions El plugin jQuery easing plugin permite añadir efectos a tus animaciones. Copiar el efecto que necesitas del plugin y añadirlo a jQuery.easing $.easing.easeInOutQuad = function (x, t, b, c, d) { if ((t/=d/2) < 1) return c/2*t*t + b; return -c/2 * ((--t)*(t-2) - 1) + b; }; // To use it: $('#elem').animate({width:200},'slow','easeInOutQuad');
  • 29. $.proxy() //Ejecutar • Problema: Desaparece el botón pero no el panel. • Utilizando $.proxy:
  • 30. Determinar el tamaño de tu página web • Cuanto más contenido tenga tu página web, más le costará al navegador renderizarla. • Puedes contar el numero de elementos DOM mediante: console.log( $('*').length ); • Intenta optimizarla eliminando nodos innecesarios.
  • 31. Ámbito • El problema del ámbito Sólo se está alterando el DOM una vez la página esté cargada. En casi cualquier aplicación web moderna, el DOM va a cambiar después de que la página haya sido cargada. Ejecutando jQuery dentro de success de una función AJAX:
  • 32. Como manejar el ámbito A la izquierda, se establece el handler de la manera normal. A la derecha, se realiza una búsqueda de la clase botón en el documento. La de la derecha te permite controlar el ámbito sobre el DOM que está siendo modificado. Dada esta función, se reescribe $(document).ready(fuction(){ Y la llamada AJAX de una manera similar:
  • 33. Cuando se rompe el ámbito La variable scope solo será válida dentro de la función my_button_jquery. Es importante tener en cuenta que este ámbito se romperá si realizamos una llamada a otra función. Naturaleza asíncrona del modelo de eventos de Javascript. Por eso, la función AJAX anterior no es posible escribirla con scope dentro del manejador success. • Eficiencia Siempre debes invocar el objeto jQuery desde fuera de la función para mejorar la eficiencia. //mal //bien
  • 34. Establecer AJAX Global En una petición AJAX, algunas veces necesitas indicar que la petición está en progreso (mostrar animación, capa más oscura, etc.)
  • 35. Usar HTML5 Data Attributes • HTML5 data attributes son utilizados para almacenar información en la página web. • Para acceder a los atributos del div: • http://api.jquery.com/data/
  • 36. Crear un plugin en jQuery (function($){ $.fn.yourPluginName = function(){ … return this; }; })( jQuery); $(“p”).yourPluginName(); Fichero jquery.reversetext.js
  • 37. Crear un plugin en jQuery HTML: Resultado:
  • 38. Comprimir tu Javascript • Comprimir el código Javascript usando YUICompressor • Menor tiempo de respuesta -> Agilizamos la carga del página web. • Otros compresores de Javascript: – http://javascriptcompressor.com/ – http://jscompress.com/ • También podemos comprimir nuestro código CSS – http://www.cssdrive.com/index.php/main/csscompressor/
  • 39. jQuery mobile • http://jquerymobile.com/ - Versión 1.2.0 • Librería Mobile UI. • HTML5 Data Atributtes definidos. <div data-role="page" id="home"> </div> <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" /> <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script> <script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>
  • 40. <ul data-role="listview" data-inset="true" data-filter="true"> <li><a href="#">Acura</a></li> <li><a href="#">Audi</a></li> <li><a href="#">BMW</a></li> <li><a href="#">Cadillac</a></li> <li><a href="#">Ferrari</a></li> </ul> http://jquerymobile.com/demos/1.2.0/docs/about/getting-started.html
  • 41. jQuery mobile – Buenas prácticas a) Mirar detenidamente los ejemplos – http://jquerymobile.com/demos/ b) Cada página debe de valerse por sí misma – Debe contener: CSS, Javascript, header, footer, etc. c) Comprobar que ocurre cuando desactivas Javascript d) Asegúrate de que tu código no sea vulnerable a los ataques
  • 42. jQuery mobile – Buenas prácticas • Minimizar y comprimir – Reducir el número de peticiones HTTP – Minimizar los ficheros CSS y Javascript – Intentar que las páginas webs sean menores de 25KB (para que sea posible el uso de la caché) – Utilizar la herramienta YUI Compressor
  • 43. jQuery mobile – Buenas prácticas • Números de teléfono, mapas y correos electrónicos – No embeber mapas en las aplicaciones móviles
  • 44. jQuery mobile – Buenas prácticas • Usar jQuery Validate – http://bassistance.de/jquery-plugins/jquery-plugin-validation/ – No hay que confiar en el usuario.
  • 45. jQuery mobile – Buenas prácticas • Usar ThemeRoller – http://jquerymobile.com/themeroller/ • Usar radio button en lugar de select – Select son menos consistentes, suelen dar más problemas entre las plataformas. – Permiten al usuario ver al instante las opciones de elección.
  • 46. jQuery mobile – Buenas prácticas • Añadir Google Analytics
  • 47. jQuery mobile – Buenas prácticas • Usar correctamente las etiquetas meta • Determinar que estilo de navegación usar: – La página principal es el menú global – El menú global es una subpágina – El menú global está al final de cada página
  • 48. La página principal es el menú global El menú global es una subpágina • Pros • Pros – Simple – Escalable – Buena UX – Contexto – Velocidad – Velocidad • Contras • Contras – Demasiados enlaces – Cuestionable UX
  • 49. El menú global está al final de cada página • Pros – Escalable – Velocidad – Contexto – Excelente UX • Contras – Aplicaciones no usan esta interfaz
  • 50. jQuery mobile – Buenas prácticas • Detectar y redireccionar a móvil – Browser sniffing - WURFL • Establecer un enlace a la página completa • Contenido vs Funcionalidad