Académique Documents
Professionnel Documents
Culture Documents
3.2.2 Liste numrote .....................................................................................................39 3.2.3 Insrer des sparateurs dans les listes...................................................................39 3.2.4 Afficher un compteur dans un lment de liste.......................................................40 3.2.5 Rechercher dans une liste......................................................................................41 3.2.6 Listes lecture seule..............................................................................................42 3.3 .Utiliser des boutons.......................................................................................................43 3.3.1 Dfinir un bouton.....................................................................................................43 3.3.2 Associer une icne un bouton..............................................................................43 3.3.3 Juxtaposer les boutons horizontalement (inline).....................................................43 3.4 .lments de formulaires................................................................................................44 3.4.1 Boutons radio..........................................................................................................44 3.4.2 Sliders.....................................................................................................................45 3.4.3 lment de recherche.............................................................................................45 3.4.4 Mieux disposer les lments l'cran....................................................................45 3.5 .Les barres d'outils.........................................................................................................46 3.5.1 Barres d'outils "header" et "footer"..........................................................................46 3.5.2 Barres d'outils de type fixe......................................................................................47 3.5.3 Utiliser les barres de navigation..............................................................................47 3.6 .Travaux pratiques..........................................................................................................48 4 .Programmer avec lAPI jQuery Mobile..................................................................................51 4.1 .Initialisation du Framework............................................................................................51 4.1.1 L'vnement mobileinit...........................................................................................51 4.1.2 Options de configuration.........................................................................................52 4.1.3 vnements jQuery Mobile.....................................................................................53 4.1.4 Fonctions utilitaires.................................................................................................55 4.2 .Manipuler des pages.....................................................................................................57 4.2.1 Grer les attributs d'une page.................................................................................57 4.2.2 Pr-chargement et gestion du cache......................................................................57 4.2.3 Grer ses pages de faon programmatique............................................................58 4.3 .Manipuler des listes.......................................................................................................59 4.3.1 Grer les attributs d'une page.................................................................................59 4.3.2 Crer une liste dynamiquement..............................................................................60 4.3.3 Supprimer un lment dans une liste......................................................................61 4.3.4 Grer les vnements sur les listes........................................................................62 4.4 .Manipuler des boutons..................................................................................................63 4.4.1 Grer les attributs d'un bouton................................................................................63 4.4.2 Agir dynamiquement sur un bouton........................................................................63 4.4.3 Grer les vnements sur les boutons....................................................................64 4.5 .Manipuler des champs de saisie...................................................................................64
4.5.1 Affecter et rcuprer la valeur inscrite dans un champ de saisie............................64 4.5.2 Grer les vnements sur les champs de saisie.....................................................64 4.6 .Manipuler des cases cocher.......................................................................................65 4.6.1 Grer les vnements sur les cases cocher........................................................65 4.6.2 Fonction de gestion des cases cocher.................................................................65 4.7 .Manipuler des boutons radio.........................................................................................66 4.7.1 Grer les vnements sur les boutons radio...........................................................66 4.7.2 Fonction de gestion des boutons radio...................................................................66 4.8 .Manipuler des sliders.....................................................................................................67 4.8.1 Crer dynamiquement un slider..............................................................................67 4.9 .Travaux pratiques..........................................................................................................67 5 .jQuery Mobile et HTML 5......................................................................................................71 5.1 .Customisation des styles et formatage de contenus......................................................71 5.1.1 Crer son propre thme..........................................................................................71 5.1.2 Crer une icne personnalise...............................................................................73 5.1.3 Regrouper des lments par colonnes...................................................................74 5.1.4 Contenus coulissants et accordons.......................................................................74 5.2 .Balises HTML 5 spciales.............................................................................................76 5.2.1 Insrer du contenu multimdia : les balises audio et video.....................................76 5.2.2 Interagir avec son tlphone: les attributs email et tel............................................76 5.2.3 Autres attribut HTML 5 : search, url.......................................................................77 5.3 .Persistance de donnes................................................................................................78 5.3.1 Stockage dans la session.......................................................................................78 5.3.2 Stockage permanent ct client..............................................................................78 5.4 .Utilisation de la Golocalisation.....................................................................................80 5.4.1 Connatre ses coordonnes gographiques...........................................................80 5.4.2 Afficher une fentre Google Maps..........................................................................83 6 .Dvelopper avec le Framework PhoneGap...........................................................................83 6.1 .jQuery Mobile et PhoneGap..........................................................................................83 6.2 .Dvelopper avec PhoneGap.........................................................................................83 6.2.1 Pr-requis...............................................................................................................83 6.2.2 Installation de PhoneGap........................................................................................84 6.2.3 Importer son projet jQuery Mobile ..........................................................................84 Annexes :...................................................................................................................................85 mulateurs mobiles .........................................................................................................85 Sites et blogs....................................................................................................................85 Rfrences................................................................................................................................86
1 . Introduction au Framework
1.1 . jQuery au cur de l'internet Mobile
Pour le dire de faon sommaire, jQuery Mobile est une outil logiciel qui fonctionne de manire transparente sur toutes les plate-formes mobiles du moment. Aussi riche que sa parente jQuery, dont la renomme n'est plus faire auprs des dveloppeurs web, jQuery Mobile est la bibliothque JavaScript la plus adapte pour crer des sites web destination des smartphones et tablettes tactiles. Avec ses presque 1,2 Milliards d'utilisateurs, soit environ 17 % de la population mondiale, l'internet mobile continu de crotre de faon considrable. On estime, grce un sondage de Mdiamtrie, qu'en 2012 la moiti de la population franaise y sera connecte. La grande diversits des crans de terminaux mobiles est devenue un vritable casse-tte pour les dveloppeurs de sites web mobiles, soucieux de ne pas rater le passage l're du tout mobile. Grce jQuery Mobile, il est dsormais facile de crer des sites et applications web performantes, qui s'adaptent tous les types d'interfaces. Aujourd'hui en version 1.0, jQuery Mobile est dj dclare "Innovationdel'anne" par les .Net Awards ! Qu'il s'agisse des fentres et composants graphiques d'interface HTML/CSS ou de l'interaction du site avec des donnes extrieures [base de donnes sur un serveur distant, golocalisation avec Google Maps...) grce JavaScript, jQuery Mobile (jQM) donne tous les lments pour construire, avec une agrable facilit, des sites qui fonctionneront sur la plupart des supports mobiles actuels. Lexplosion des ventes de smartphones et le besoin toujours plus grand des internautes dtre connect au monde a favoriser la croissance de ce type de plates-formes de dveloppement mobile. Pour de nombreux dveloppeurs, jQuery Mobile est tout simplement en tte du classement. L'inclure dans ses projets est un donc choix absolument stratgique.
Tlcharger le fichier JavaScript et de l'appeler dans son fichier html. Il faut dans ce cas tlcharger galement: La feuille de style jquerymobile.css Le dossier d'images mettre dans le mme rpertoire que les fichiers.
Faire un lien vers les fichiers JavaScript et CSS directement hbergs par les fondateurs du Framework. Cette mthode a l'avantage de nous viter de tlcharger des documents (JavaScript, images).
tant donn que jQuery Mobile dpend du Framework jQuery, celui-ci doit tre invoqu bien avant l'importation de jQM. Concrtement on aura avoir ceci :
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.1.0-rc.1/jquery.mobile-1.1.0rc.1.min.js"></script>
Une page contenant gnralement : Un titre (entte, header) Du contenu (content) pied de page (footer)
Dfinitiond'unepagedebaseenjQueryMobile:
<body > <div data-role="page"> <div data-role="header"> <h1>Un Titre</h1> </div><!-- /header <div data-role="content"> <p>Hello world</p> </div><!-- /content --> </div><!-- /page --> </body >
<!doctype html> <html > </head> <title>Ma premire Page</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0rc.1/jquery.mobile-1.1.0-rc.1.min.css" /> <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> <script src="http://code.jquery.com/mobile/1.1.0-rc.1/jquery.mobile1.1.0-rc.1.min.js"></script> </head> <body > <div data-role="page">
<div data-role="header"> <h1>Un Titre</h1> </div><!-- /header <div data-role="content"> <p>Bonjour le monde !</p> </div><!-- /content -->
Exemplesdeslectionsintressantes:
Slectionne tous les lments du DOM $("*") ; Slection dlments HTML Paragraphe : $('p') ; //Slectionne tous les paragraphes de la page html Slection tous les lments de type hx (h1, h2, h3, h4, ...) $(":header") ; Liste puces : $('li') ; //Slectionne tous les lments de type liste.
Slection d'une classe et d'un id $('.demo') ; //La classe sappelle demo $('#contenu') ; //Lid sappelle contenu
Slectionne tous les lments comportant le mot 'mobinaute' $(":contains('mobinaute')") ; Renvoi tous les blocs d'lments comportant des images $("a:has(img)") ; Slectionne tous les lments de type submit $(input[type= "submit"]) ou $( :submit); Slectionne tous les lments qui n'en contiennent pas d'autres. Ici on slectionne les cases vides d 'un tableau $("td:empty") ;
Une fois ces lments slectionns on peut leur appliquer un certain nombre de changements grs dynamiquement par jQuery. Ainsi si nous souhaitons ajouter une classe 'rouge' un lment ayant pour id le mot header et une classe 'noir' un lment ayant pour id le mot footer, il suffira d'crire :
La fonction $() va donc nous permettre de slectionner tout (ou presque tout) ce que l'on souhaite.
10
Il est trs facile de rcuprer le contenu du paragraphe ayant l'id 'contenu' grce la fonction text() :
var contenu = $("#contenu").text();
Le DOM (Document Object Model) est une interface de programmation (API) qui dcrit la structure d'un document et surtout la manire d'y accder et de le manipuler. Plus d'informations sur Wikipdia (http://fr.wikipedia.org/wiki/Document_Object_Model)
11
Danscetexemple,nousaffichonslecontenuduparagraphedansunealerte
<script> var contenu = $('#contenu').text(); // Juste du texte alert('## DEBUT ## ' + contenu + ' ## FIN ##');// Affiche une alerte </script>
Voir la Dmo 1 (Dossier demos/chapitre2) Si l'on souhaite prsent changer le contenu du paragraphe, il suffit de faire :
$("#contenu").text("Bonjour le Monde");
Qui a pour effet de remplacer le contenu actuel du paragraphe par Bonjour le Monde . De faon gnrale, La fonction text() sans argument permet de rcuprer le contenu d'un lment du DOM, tandis qu'avec un argument de type chane de caractre, celle-ci va remplacer le contenu courant par celui indiqu en paramtre.
12
LetexteduparagrapheatremplacparBonjourleMonde
13
La variable contenuHTML contient le code html qui se trouve lintrieur de la div (id='contenu').
Si l'on souhaite par contre modifier le contenu du bloc en y insrant autre chose , il suffit de faire : $('#secondaire').html(autre_contenuHTML);
Insertiond'unnouveaucontenuhtml
<script> var autre_contenuHTML = "<p>Voici un nouveau contenu qui montrer la facilit d'utilisation de la fonction <b>html()</b><p>"; var contenuHTML = $('#contenu').html(autre_contenuHTML); alert('## DEBUT ## ' + contenuHTML + ' ## FIN ## '); </script> Voir les Dmos 2 et 2 bis (Dossier demos/chapitre2)
14
<div class="container">
<div class="hello">Hello</div> <div class="world">World</div> </div>
$('.hello').remove();
Qui aura pour rsultat la suppression du bloc contenant la classe 'world'. On aura finalement :
<div class="container">
<div class="world">World</div> </div>
Si plusieurs blocs possdent la classe slectionne, ils seront galement supprimer. Cette fonction est particulirement intressante dans le cas o l'on souhaiterait supprimer du contenu, sans affecter la hirarchie du DOM
15
<!DOCTYPE html> <html> <head> <script src="http://code.jquery.com/jquery-latest.js"></script> <style>p { background:blue; }</style> </head> <body> <p>Hello mobinaute ! </p> <p>Comment vas-tu</p> Ce texte ne sera PAS supprim. <p>aujourd'hui?</p> <button>Supprimer les paragraphes</button> <script> $("button").click(function () { $("p").remove(); }); </script> </body> </html>
On peut aussi choisir de ne supprimer que des paragraphes possdant une certaine classe.
<!DOCTYPE html> <html> <head> <style>p { background:blue; }</style> <script src="http://code.jquery.com/jquery-latest.js"></script> </head> <body> <p class="hello">Hello mobinaute ! </p> <p>Comment vas-tu</p> Ce texte ne sera PAS supprim. <p>aujourd'hui?</p> <button>Supprimer les paragraphes</button> <script> $("button").click(function () { $("p").remove(":contains('Hello')"); }); </script> </body> </html>
16
L'exemple ci-dessus permet de simuler le clic d'un utilisateur. D'autres vnements se fondent sur le mme principe : blur, bind, change, mouseon, mouseup
Dans l'exemple prcdents, nous avons sans le signaler utilis des vnements. Il en existe un certain nombre, plusieurs dizaines pris en charges par jQuery, mais les plus utiliss sont trs certainement bind, click, toggle, change, submit , ready et load. Un vnement est presque toujours associ une slection, et donc affect un objet du DOM.
17
Exemple 1 : Annule une action par dfaut, ici la soumission d'un formulaire.
$("form").bind("submit", function() { return false; })
Codedetest:
<p>Hello</p>
Rsultat:
alert("Hello")
La class 'no-see ' a un display 'none'. Le contenu du span n'est donc pas visible au chargement de la page.
18
L'lment this se rfre l'objet courant du DOM, et dans notre exemple il s'agit du paragraphe ayant pour id 'clic'. La fonction find() permet de trouver un lment contenu dans le paragraphe (this). Puis une fois cet lment trouv, on supprime la class 'no-see ' avec la fonction removeClass().
19
disparait,
L'action se fait au clic sur un bouton. L'vnement est dfinie de faon relativement simple en jQuery :
<script> $("#secondaire").toggle( function () { $('#contenu').addClass("toggle"); }, function () { $('#contenu').removeClass("toggle"); } ); </script>
20
La fonction toggle() permet d'alterner entre deux action par clic successifs. Ainsi au premier clic la premire fonction est invoque, tandis qu'au second, c'est la deuxime qui est invoque. Le cycle recommence au clic. Les fonctions addClass() et removeClass() permettent respectivement d'ajouter ou de supprimer une classe donne en paramtre.
Code complet :
<html > <head> <title>Dmos jQuery</title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></scrip t> <style type="text/css"> .container { width:40em; margin:0px auto; padding:10px; background:#eee; border-radius:3px; } .toggle { display:none; } </style> </head> <body> <div class="container"> <h1 id="titre">Demo2 jQuery Gestion des vnements</h1> <div id="contenu"> <p>Un contenu qui apparait et disparait, apparait, disparait, apparait, </p> <ul> <li>jQuery UI</li> <li>jQuery Mobile</li> </ul> </div><!--- Contenu-->
21
<p id="secondaire"> <button>Toggle-me !</button> </p><!--- Contenu secondaire </div><!--- Container <script> $("#secondaire").toggle( function () { $('#contenu').addClass("toggle"); }, function () { $('#contenu').removeClass("toggle"); }); </script> </body > </html >
Aprs :
22
23
Exemple:
2.5.2 each
La fonction. each () lorsqu'elle est appele permet d'effectuer une itration sur les lments du DOM qui font partie de l'objet jQuery. Supposons que nous ayons la liste non ordonne suivante:
<ul> <li> un </ li> <li> deux </ li> </ul>
Nous pouvons choisir les lments de la liste et effectuer une itration sur chacun d'eux: $ ('li'). each (function (index) { alert (index + ':'. + $ (this).text()); }); Affichera le contenu de chaque lment de liste prcd du texte 'index+'.
2.5.3 after
Insre du contenu aprs chaque lment de la slection.
24
25
<form class="ajax" action="search.php" method="get"> <p> <label for="query">Rechercher un article</label> <input type="text" name="query" id="q" /> </p> </form> <!Formulaire> <div id="results"></div><!Rsultats> Avec jQuery, l'utilisation d'Ajax se fait simplement : $(document).ready( function() { //dtectiondelasaisiedanslechampderecherche $('#q').keyup( function(){ $field = $(this); $('#results').html(''); //onvidelesresultats $('#ajax-loader').remove(); //onretireleloader //oncommencetraiterpartirdu2mecaractresaisie if( $field.val().length > 1 ) { //onenvoielavaleurrecherchenGETaufichierdetraitement $.ajax({ type : 'GET', //envoidesdonnesenGETouPOST url : 'ajax-search.php' , //urldufichierdetraitement data : 'q='+$(this).val() , //donnesenvoyerenGETouPOST beforeSend : function() { //traitementsJSfaireAVANTl'envoi $field.after('<img src="ajax-loader.gif" alt="loader" id="ajax-loader" />'); //ajoutd'unloaderpoursignifierl'action }, success : function(data){ //traitementsJSfaireAPRESleretourd'ajaxsearch.php $('#ajax-loader').remove(); //onenleveleloader $('#results').html(data); //affichagedesrsultatsdanslebloc } }); } }); });
26
'Supprimer '. Ce bouton permettra donc de supprimer un contact du tableau. Cependant au lieu de faire disparatre la ligne choisie, sa couleur d'arrire-plan deviendra rouge, et le texte du bouton passera de 'Supprimer' 'Annuler'. Afficher/Masquer Utiliser les fonctions addClass()/Remove() pour afficher/masquer le contenu d'un texte. Validation de formulaires Utiliser la fonction submit() pour valider un formulaire. Affichage de commentaires sans rafrachissement de la page (Ajax)
27
Dclarationd'undoctypeHTML5:
<!DOCTYPE html> <html>
L'entte html (<head>...</head>) doit ensuite importer les lments ncessaires au fonctionnement de jQM en suivant cet ordre: La feuille de style jQuery Mobile (CSS) Le fichier jQuery (JavaScript) Le fichier jQuery Mobile (JavaScript)
<head> <title>Ma premire page</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0rc.1/jquery.mobile-1.1.0-rc.1.min.css" /> <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> <script src="http://code.jquery.com/mobile/1.1.0-rc.1/jquery.mobile-1.1.0rc.1.min.js"></script>
</head>
28
Remarques : jQuery Mobile est compatible la fois avec les versions 1.6.4 et 1.7.1 de jQuery. Sur le site du Framework, il est recommand de faire un lien vers les sources stockes directement sur les serveurs jQuery (code.jquery.com).
Notons au passage la prsence de la mtadonne viewport qui spcifie le niveau de zoom de la page au sein du navigateur, ainsi que les dimensions de celle-ci. Nous prcisons ici que la page s'affichera normalement, sans zoom (valeur 1), et que sa largeur sera gale celle du device2 (width=device-width) depuis lequel la page est consulte Si l'on souhaite afficher la page avec un zoom de 2, il suffit simplement de mettre la valeur du initial-scale 2. Il faut noter que ce choix de configuration nempche pas l'utilisateur de zoomer/dzoomer sur la page qu'il consulte.
Dfinitiond'unepage(Vue)jQueryMobile
<div data-role="page"> ... </div>
29
Au sein ensuite d'une page, il est possible d'ajouter n'importe quel lment html (lien hypertexte, image, liste puce,...). Cependant et dans une logique de dveloppement mobile, on utilise toujours strictement la structure suivante :
<div data-role="page"> <div data-role="header">...</div> <div data-role="content">...</div> <div data-role="footer">...</div> </div>
Une page est ainsi compose : D'un entte o apparatra le titre de la page (Vue) courante D'un contenu, o l'on affichera les lments visibles de la page D'un pied de page o l'on pourra par exemple rajouter un copyright ou mme un menu sous forme d'onglets (Navigation tab).
Unexemplecomplet:
<!DOCTYPE html> <html>
<head> <title>Ma premire page</title> <meta name="viewport" content="width=device-width, initialscale=1"> <link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0-rc.1/jquery.mobile-1.1.0rc.1.min.css" /> <script src="http://code.jquery.com/jquery1.7.1.min.js"></script> <script src="http://code.jquery.com/mobile/1.1.0rc.1/jquery.mobile-1.1.0-rc.1.min.js"></script> </head>
30
<body> <div data-role="page"> <div data-role="header"> <h1>Ma premire vue</h1> </div><!-- /header --> <div data-role="content"> <p>Le contenu de la page s'affichera ici.</p> </div><!-- /content --> <div data-role="footer"> <h4>© 2012 Mobile-tuts! Un beau pied de page</h4> </div><!-- /footer --> </div><!-- /page --> </body> </html>
Dfinitiond'undocumentmultipage
<body> <div data-role="page" id="page1"> <div data-role="header"> <h1>Titre - Page 1</h1>
31
</div><!-- /header --> <div data-role="content"> <p>Contenu de la premire page.</p> <p>Afficher la <a href="#page2">Page n2</a></p> </div><!-- /content --> <div data-role="footer"> <h4>© 2012 Mobile-tuts! Un beau pied de page</h4> </div><!-- /footer --> </div><!-- /page 1 --> <div data-role="page" id="page2"> <div data-role="header"> <h1>Titre - Page 2</h1> </div><!-- /header --> <div data-role="content"> <p>Contenu de la seconde page.</p> <p><a href="#page1">Retour la page 1</a></p> </div><!-- /content --> <div data-role="footer"> <h4>© 2012 Mobile-tuts! Un beau pied de page</h4> </div><!-- /footer --> </div><!-- /page 2 --> </body>
La transition d'une page l'autre se fait en Ajax, qui se sert des diffrents ID pour trouver la page recherche (href="#ID_de_la_page_recherche") .
Remarque Il n'est actuellement pas possible de crer un ancre (lien hypertexte interne) au sein d'une mme page, car jQuery Mobile utilise le caractre dise pour la recherche de pages.
32
Il est recommand dans un contexte multi-page de dfinir le titre de chaque vue (page) l'aide de l'attribut data-title , plutt que d'utiliser l'attribut datarole="header" dans un div au sein duquel on dfinit le titre (h1). On passe ainsi de :
<div data-role="header">
<h1>Un titre de page</h1> </div><!-- /header -->
<div data-role="content">
<p>Contenu de la seconde page.</p> <p><a href="#page1">Retour la page 1</a></p> </div><!-- /content --> <div data-role="footer"> <h4>© 2012 Mobile-tuts!</h4> </div><!-- /footer --> </div>
ceci :
<div data-role="page" id="page1" data-title="Un titre de page">
<div data-role="content">
<p>Contenu de la seconde page.</p> <p><a href="#page1">Retour la page 1</a></p> </div><!-- /content -->
</div>
33
<p><a href="#page1">Aller la page 1</a></p> Si l'on souhaite par contre atteindre un contenu qui n'est pas dans le document courant, jQuery Mobile utilise par dfaut la technologie Ajax, pour passer d'une vue une autre. Le contenu est import et rajout au DOM. <a href="externe.html" rel="external">Une page externe</a> L'attribut rel="external" permet de prciser qu'il s'agit bien d'une page externe au document courant. Si l'on ne souhaite pas utiliser Ajax pour passer d'un contenu un autre, il faut mettre l'attribut data-ajax false. Soit avec l'exemple prcdent : <a href="externe.html" rel="external" data-ajax="false">Une page externe</a>
34
Dfinirl'icned'uneapplication
<link rel="apple-touch-icon" href="apple-touch-icon.png"> <link rel="apple-touch-icon" sizes="72x72" href="apple-touch-icon72x72.png"> <link rel="apple-touch-icon" sizes="114x114" href="apple-touch-icon114x114.png">
Cette icne s'affichera l'enregistrement d'une page en favoris sur votre iPhone ou iPad. Cette option est galement reconnu sur Android (Voir l'illustration ci-dessous)
35
Illustration1:Icnel'enregistrementd'unfavoris
Dfinirunsplashscreen
<!-- iOS 3+: dimensions 320x460 --> <link rel="apple-touch-startup-image" href="startup.png"> Le splash screen est l'image qui s'affiche en grand cran au dmarrage d'une application.
36
Affichageenmodepleincran
<meta name="apple-mobile-web-app-capable" content="yes" />
Changerlacouleurdelabarred'tatenmodepleincran
<!-- La barre d'tat aura un fond noir --> <meta name="apple-mobile-web-app-status-bar-style" content="black" />
37
38
39
Soit avec un exemple complet : <div data-role="content"> <ul data-role="listview" data-theme="g"> <li data-role="list-divider">Titre liste 1</li> <li><a href="lien1.html">Mon lien 1</a></li> <li><a href="lien2.html">Mon lien 2</a></li> <li><a href="lien3.html">Mon lien 3</a></li> </ul> <ol data-role="listview" data-theme="g"> <li data-role="list-divider">Titre liste 2</li> <li><a href="lien1.html">Mon lien 1</a></li> <li><a href="lien2.html">Mon lien 2</a></li> <li><a href="lien3.html">Mon lien 3</a></li> </ol> </div><!-- /content --> Voir dmo 4 (chapitre 3)
40
<ul data-role="listview" data-theme="g" data-filter= "true" datafilter-placeholder="Rechercher..."> <li> <a href="lien.html">Google</a> </li> <li> <a href="lien.html">Microsoft</a> </li> <li> <a href="lien.html">Apple</a> </li> <li> <a href="lien.html">Oracle</a> </li> </ul>
41
Illustration3:Avantfiltrage
Illustration4:Aprsfiltrage
42
<a href="index.html" data-role="button" data-icon="delete" > Bouton qui possde sa propre icne </a>
Vous pouvez voir ici la liste des icnes actuellement disponibles jquerymobile.com/demos/1.1.0-rc.1/docs/buttons/buttons-icons.html
sur :
Il reste tout fait possible de personnaliser son icne, comme nous le verrons dans un prochain chapitre.
43
44
3.4.2 Sliders
Pour ajouter un slider notre page, il suffit simplement d'intgrer un lment input ayant pour type ''range'' :
<label for="slider-0">Input slider:</label> <input type="range" name="slider" id="slider-0" value="60" min="0" max="100" />
d'effectuer des
<div data-role="fieldcontain"> <label for="name">Text Input:</label> <input type="text" name="name" id="name" value="" /> </div>
45
Il est trs facile d'ajouter des boutons une barre d'outils den-tte ou de pied de page :
<div data-role="header"> <a href="index.html" data-icon="delete">Annuler</a> <h1>diter un contact</h1> <a href="index.html" data-icon="check" data-theme="b">Sauvegarder</a> </div>
La barre de pied de page :qui est gnralement le dernier lment d'une page et se construit exactement comme une barre d'outil d'entete :
<div data-role="footer" class= ''ui-bar''> <div data-role="controlgroup" data-type="horizontal"> <a href="index.html" data-role="button" data-icon="delete">Supprimer</a> <a href="index.html" data-role="button" data-icon="plus">Ajouter</a>
46
<a href="index.html" data-role="button" data-icon="arrow-u">Haut</a> <a href="index.html" data-role="button" data-icon="arrow-d">Bas</a> </div> </div>
On peut choisir d'insrer la navigation par onglet dans notre pied de page : <div data-role="footer">
<div data-role="navbar"> <ul> <li><a href="#">Un</a></li> <li><a href="#">Deux</a></li> <li><a href="#">Trois</a></li> </ul> </div><!-- /navbar --> </div><!-- /footer -->
47
javascript, documents CSS, ... Faire valider votre installation. Cration de pages Crer une vue comportant un titre, un contenu et un pied de page Ajouter quatre vues diffrentes votre application, de faon ce que l'on puisse naviguer de la page 1 (#page1) vers la page 2(#page2), de la page 2 vers la page 3(#page3), de la page 3 vers page 4(#page4) et de la page 4 vers la page 1. page 1 page 2 page 3 page 4 Remplacer l'ID de la page 2 par ''#page22''. Ne changer rien d'autre. Depuis la page 1 cliquez sur le lien menant la page 2. Que se passe t-il ? Embellir son application Dfinir des icnes pour diffrents formats d'application. Ajouter un splashpage (iOS) votre application. Utiliser des formulaires Crer une page de connexion : Login, mot de passe. Le formulaire aura un id=''formulaire''. Valider le formulaire en ajoutant le script jQuery suivant juste avant la balise </body> :
48
<script> $("#formulaire").submit( function() { if ( $("input", this).val().length > 0 ) { $('#formulaire').after('<p>Erreur </p>').css('background','red'); return false ;// Le formulaire n'est pas envoy. } } ); <script>
Utiliser des listes Voir dans la documentation comment crer les deux types de listes cidessous
Et :
49
Trouver dans la documentation officiel commet faire pour afficher les boutons de cette faon. Indice : faites afficher le source. Barre de navigation Comment insrer des icnes dans une barre de navigation (den-tte ou de pied de page?) Rechercher dans la documentation comment changer le thme d'une barre navigation.
50
"Enregistrementdel'vnementmobileinit" $(document).bind("mobileinit", function(){ //Mettre ici des actions excuter au dmarrage });
Cet vnement doit tre enregistr (bind) bien avant le chargement de jQuery Mobile. Pour ce faire, il est impratif d'importer les fichiers JavaScript dans cet ordre l :
<script src="jquery.js"></script> <script src="mon-script-perso.js"></script> <script src="jquery-mobile.js"></script>
51
Et c'est dans le fichier "mon-script-perso.js" que l'on crira l'enregistrement JavaScript de l'vnement. A partir de l, on pourra personnaliser notre environnement d'excution en ajoutant nos propres paramtres par dfaut.
$(document).bind("mobileinit", function(){ $.mobile.une_option = valeur; }); une_option: l'option que l'on souhaite modifier. Ces options sont proposes par le
framework (Voir tableau plus bas)
52
Nom de l'option
Type
Description
La classe CSS utilise lorsqu'un String "ui-btn-active" bouton est dans son tat "actif" String Boole n Boole n String String String String "ui-pageactive" true true 'pop' 'slide' false "a" La classe CSS assigne la page courante Gre l'activation/dsactivation d'Ajax Initialisation automatique ou non d'une page. Transition par dfaut d'une boite de dialogue. Transition par dfaut d'une page Texte affich lors d'un chargement. Thme (style) du message
La dclaration d'un vnement se fait l'aide de la fonction JavaScript bind() ou live(), au choix.
53
Remarque :
IlfaututiliserlafonctionpageInit()proprejQueryMobileetquipermetd'excuterdu codeavantlechargementd'unequelconquepage(vue),aulieude$(document).ready.
Nous listons dans le tableau ci-dessous quelques-uns des vnements par type : Type dvnement Toucher Toucher Toucher vnement tap taphold swipe Description vnement au clic rapide (tap) Toucher l'cran d'environ 1s Drag horizontal sur 30px ou plus et moins de 20px en verticale. Swipe gauche Swipe droite Evenement au toucher. Evenement au dbut du toucher vnement au mouvement du doigt vnement la fin du toucher vnement lors d'un changement d'orientation vnement au dmarrage du scrolling vnement la fin du scrolling vnement avant le chargement de la page
Toucher Toucher Souris (virtuelle) Souris (virtuelle) Souris (virtuelle) Souris (virtuelle) Orientation Scroll Scroll Chargement de la page
swipeleft swiperight vmouseover vmousedown vmousemove vmouseup orientationchange scrollstart scrollstop pagebeforeload
54
Description vnement au chargement non russi d'une page vnement avant l'affichage de la page de destination
Exemplesd'utilisationd'vnementsjQueryMobile
// pageshow : le paramtre data est un objet du DOM. On pourra donc le manipuler $( 'div' ).live( 'pageshow',function(event, data){ console.log( 'Le contenu de "'+
// pagehide : le paramtre data est galement un objet du DOM. $( 'div' ).live( 'pagehide',function(event, data){ console.log( 'Le contenu de "'+
55
Nom de la fonction
Description permet de passer d'une page une autre de faon dynamique et programmatique Charge un page externe au document courant Permet l'affichage d'un texte au chargement d'une page
Arguments destination, options url, options Theme (string), msgText (string), textonly(boolean ) url relative ou absolue. url url1, url2
Permet de parser une URL Converti une url relative en absolue Compare les domaines de 2 URLs Permet de scroller endroit de la page, sans dclencher un vnement de type scroll
Exemplesd'utilisationdesfonctions
//Passage la page "apropos" avec un slideup comme transition $.mobile.changePage( "about/apropos.html", { transition: "slideup"} ); //Passage la page "resultats" , en utilisant les donnes d'un formulaire $.mobile.changePage( "resultats.php", { type: "post", data: $("form#search").serialize() }); //Active l'affichage d'un texte au chargement $.mobile.showPageLoadingMsg(); //On utilise le thme "b", un message personnalis, et que du texte $.mobile.showPageLoadingMsg("b", "Chargement en cours ...", true);
56
Valeurs possibles
data-back-btn-theme Thme du bouton retour arrire data-close-btn-text data-dom-cache data-fullscreen data-overlay-theme data-theme data-title Thme de la page Titre de la page Texte associ l'icne de fermeture d'une boite de dialogue. Gestion du cache du DOM Affichage en mode plein cran. A combiner avec les barres de navigation fixes.
a-z String
57
cette page, de faon ce qu'au clic sur le lien, le chargement se fasse presque instantanment. On utilise l'attribut data-prefetch.
Exempledeprchargementd'unepage
<a href="lourde_page.html" data-prefetch> ... </a> Il est galement possible de stocker les pages de son application directement dans le DOM. On peut effectuer le stockage de faon programmatique (1) ou alors depuis le html (2) : (1) Stock l'ensemble des pages dj visites
$.mobile.page.prototype.options.domCache = true;
(2) Ne stock que cette page et toutes celles qui auront l'attribut true <div data-role="page" id="cacheMe" data-dom-cache="true"> Les pages stockes sont celles qui ont t visites avant la page courante.
$.mobile.loadPage( "blog/articles-android.html" ); Scroller une position prcise dans une page $.mobile.silentScroll(300);
58
Nom de l'attribut
Valeurs possibles
data-count-theme data-dividertheme data-filter data-filter-placeholder data-filter-theme data-inset data-split-icon Thme du sparateur de catgories Filtrage de donnes Texte associ au filtre. Thme du filtre Recadrage du listview home | delete | plus | arrow-u | arrow-d | check | gear | grid | star | custom | arrow-r | arrow-l | minus | refresh | forward | back | alert | info | search Thme de l'icne (split) Thme de la liste
a-z a-z true, false String a-z true, false c.f. description
data-split-theme data-theme
a-z String
59
Voir dmo 4_bis (chapitre 4) On souhaite qu' la validation du formulaire, une liste contenant les donnes du contact soit cre.
60
CodeHTML
<div data-role="content"> <ul data-role="listview" data-filter="true" data-filterplaceholder="Rechercher..." data-inset="true"> <li data-role="list-divider">Web & Software</li> <li><a href="#">Javascript</a></li> <li><a href="#">PHP</a></li> <li><a href="#">HTML 5</a></li> <li><a href="#">CSS 3</a></li> <li><a href="#">Linux</a></li> <li><a href="#">Putty</a></li> <li><a href="#">Tor</a></li> <li data-role="list-divider">Hardware</li> <li><a href="#">Smartphone (Android, iOS, Windows Phone)</a></li> <li><a href="#">Robotique (Arduino)</a></li> <li><a href="#">Serveurs - Box</a></li> </ul> </div><!-- /content -->
61
On souhaiterait qu'au clic sur un lment de la liste, celui-ci soit supprimer. On utilise dans ce cas la puissance des slectionneurs jQuery. L'action se fait trs facilement en se rappelant des tapes suivre lorsque l'on souhaite manipuler un lment avec jQuery : Slection de l'lment : $(), find(), has, :contains(), . Associer l'lment slectionn un listener (un vnement) Appliquer l'action recherche
CodeJavaScript
<script> // Suppression d'lments $('ul[data-role="listview"]').find('li').click(function() { $(this).remove(); //Supprime l'lment courant }); </script>
62
Nom de l'attribut
Description
data-corners data-icon home | delete | plus | arrow-u | arrow-d | check | gear | grid | star | custom | arrow-r | arrow-l | minus | refresh | forward | back | alert | info | search Filtrage de donnes Texte associ au filtre. Alignement horizontal Version compact du bouton Ombrage autour du bouton Thme du bouton c.f. Description
63
64
$("input[type='checkbox']:first").attr("checked",true).checkboxradio("refresh");
65
66
$('input').slider();
67
F1 - Page de connexion (On supposera avoir dj cr son compte). Valider le formulaire en vrifiant que tous les champs sont remplis. Les champs sont :
Une fois le formulaire valid, on devra, en cliquant sur le bouton de connexion, arriver la page d'accueil de l'application mobile.
F2 Affichage des vidos rcentes sous forme de liste. On devra pouvoir distingu les diffrentes catgories dans la liste. Le nombre et les noms des catgories sont au choix, tout comme le nombre de vido par liste.
En cliquant sur une vido de la liste, on doit pouvoir se retrouver sur une page comportant la vido (Voir figure ci-dessous).
68
Un clic sur le bouton "Catgorie" doit nous permettre d'afficher toutes les vidos de la catgorie courante.
69
F3 - Affichage du tableau de bord de l'utilisateur. Les donnes seront videmment brutes. De l il pourra naviguer dans son profil, qui
Ajouter des icnes aux diffrents onglets Fn - Pour aller plus loin : Insrer un systme d'auto-compltion aux input de l'application. Fn +1 - Sentez-vous libre de rajouter autant de fonctions que vous souhaitez.
70
La feuille de style jQuery Mobile (jquery.mobile.css) implmente dj les thmes a, b, c, d et e. Les autres ne le sont pas. On peut donc sans aucune crainte les implmenter, en leur assignant nos propres styles (couleur, ombrage,...). Supposons que l'ont souhaite crer un thme dont la couleur d'arrire-plan sera #a7a7f7. On pourrait crer son propre fichier CSS et craser les styles jQuery Mobile (couleur d'arrire-plan). C'est une solution intressante, cependant jQuery Mobile en propose une autre qui est beaucoup plus lgante et respectueuse des conventions de dveloppement propres aux Framework. Voici donc comment faire : Dfinir dans un fichier CSS tout ou partie des classes suivantes : ui-bar-[a-z] : style appliqu dans les toolbars (header et footer) ui-body-[a-z] : style appliqu au body de la page ui-btn-up-[a-z] : s'applique aux boutons et tous les lments cliquables.
71
Si l'on dcide de dsigner notre thme par la lettre 'w' par exemple, on devra concrtement dfinir les classes ui-bar-w, ui-body-w, ui-btn-up-w.
OncrunfichierCSSol'ondfiniranosnouvellesclasses
/** == Mon style personnalis == **/ .ui-bar-w, .ui-body-w, .ui-btn-up-w { background:#a7a7f7; } Ensuite, l'appel du thme se fera en ajoutant simplement un data-theme= "w" l'endroit o l'on souhaite appliquer notre style. Pour jQuery Mobile il s'agira simplement d'injecter une classe portantant le suffixe 'w'.
Oninsrelethmedansunepage
<div data-role="page" data-theme="w"> Cette solution a l'avantage d'tre gnrique, de plus on a pas se demander si l'on doit ncessairement importer notre feuille de style avant ou aprs celle de jQuery, car ils n'entreront pas de toute faon en conflit. Dans l'image ci-dessous on peut effectivement voir que jQuery a automatique inject une classe ui-body-w aprs qu'on est prcdemment prcis dans la page un data-theme="w" :
VisualisationavecFirebug
72
73
Exemple:avecdeuxblocsdecontenus:
<div class="ui-grid-a"> <div class="ui-block-a"><strong>Un bloc A</strong> et un peu de texte</div> <div class="ui-block-b"><strong>Un bloc B</strong> et un peu de texte</div> </div><!-- /grid-a --> Voir dmo 2 (chapitre 5)
<div data-role="content"> <div data-role="collapsible" data-theme="b" data-content-theme="d"> <h3>[Un titre accrocheur] Apple va faire faillite !</h3>
74
<p>...non c'est pas vrai...du moins pas avant un bon bout de temps</p> </div> <div data-role="collapsible" data-theme="b" data-content-theme="d"> <h3>La terre est ronde !</h3> <p>...et non pas plate...C'est une rvolution !</p> </div> </div><!-- /content -->
Par dfaut le contenu ne s'affiche pas, et il faut donc cliquer sur le bouton pour l'ouvrir.
On peut ensuite regrouper ces lments coulissants pour former des accordons. jQuery Mobile propose l'attribut data-role="collapsible-set" pour le gnrer :
<div data-role="content"> <div data-role="collapsible" data-theme="b" data-content-theme="d"> <h3>[Un titre accrocheur] Apple va faire faillite !</h3> <p>...non c'est pas vrai...</p> </div> <div data-role="collapsible" data-theme="b" data-content-theme="d"> <h3>La terre est ronde !</h3> <p>...et non pas plate...C'est une rvolution !</p> </div> </div><!-- /content -->
75
(Lescroixsontbiensrremplacerpardeschiffres)
76
Ces deux input, plus smantiques, permettent au tlphone d'adapter son clavier la saisie en cours. Ainsi, un utilisateur qui serait en train de saisir son adresse mail dans le champs de saisie email verra son clavier mettre plus avant des mots ou caractres comme l'arobase, le '.' ou encore les extensions de domaines (.com, .fr).
Par ailleurs, ces mme attributs existent aussi pour les liens hypertextes. Si le mail en lien hypertexte existe depuis longtemps, la possibilit d'crire son numro de tlphone dans un lien hypertexte est beaucoup plus rcente.
Unclicsurleliendclenchera,depuisuntlphonemobile,unappelverslenumroindiqu
<a href= "tel :+336xxxxxxxx" />
Exemple:lesattributssearcheturlfacilitenteuxaussilasaisieauclavier.
<input type= "search" value="" /> <input type= "url" value="charlesen.fr" />
77
78
Les donnes sont stockes pour un domaine prcis et peuvent rcupres dans n'importe quelle page du domaine en question. La proprit s'annonce comme le remplacement des cookies la diffrence qu'il est possible de stocker bien plus d'informations (Environ 5 Mb) et que seul le client peut accder ces donnes.
localeStorage['une_cle'] = 'une_valeur' ;
localeStorage.setitem('ma_cle', 'une_valeur');
localeStorage['une_cle']
localeStorage.getitem['ma_cle'];
Supprimer un lment :
removeItem('ma_cle')
79
Nous allons voir comment il est possible de rcuprer les coordonnes dun utilisateur et comment grer les cas de succs et derreur lors du dmarrage du processus de golocalisation grce des fonctions appelles callbacks.
80
La premire chose faire est de tester la prise en charge de la golocalisation par le device client (ordinateur, smartphone, tablette, ). Il suffit de faire un simple test conditionnel :
//Vrifielapriseenchargedelagolocalisationparlenavigateurcourant
if (navigator.geolocation) { }
le
navigator.geolocation renvoi
vrai
si
golocalisation, et faux sinon. Si ce test est positif, nous pourrons donc, aprs validation de l'utilisateur d'tre golocalis, afficher tranquillement nos coordonnes gographiques. C'est ce que nous prcisons dans le code ci-dessous : <script> if (navigator.geolocation) { var watchId = navigator.geolocation.watchPosition(successCallback, errorCallback, {enableHighAccuracy:true}); } else { alert("Votre navigateur ne prend pas en compte la golocalisation HTML5"); } </script>
81
successCallback et errorCallback sont appeles fonctions de Callback et permettent de grer les cas de succs et d'chec du processus de golocalisation. Trois types dchecs sont possible : Permission refuse par l'utilisateur Indtermination de la position de l'utilisateur Timeout dans l'excution de la requte
Nous dfinissons ensuite les fonctions de Callback : function successCallback(position){ $('div[data-role="content"]').after('<p>Latitude : ' + position.coords.latitude + '</p> <br />' + '<p> Longitude :' + position.coords.longitude + '</p>'); }; function errorCallback(error){ switch(error.code){ case error.PERMISSION_DENIED: alert("L'utilisateur n'a pas autoris l'accs sa position"); break; case error.POSITION_UNAVAILABLE: alert("L'emplacement de l'utilisateur n'a pas pu tre dtermin"); break; case error.TIMEOUT: alert("Le service n'a pas rpondu temps"); break; } }; Voir dmo 6 (chapitre 5)
82
PhoneGap est un framework de dveloppement d'applications natives en Javascript, CSS et HTML. Elle a la particularit de pouvoir exploiter les fonctionnalits et les ressources du mobile sur lequel elle se lance (golocalisation, acclromtre, etc.).. Les applications sont construites comme de simples pages HTML avant d'tre packages pour s'excuter dans un UIWebView (iOS) ou une WebView (Android).
83
Pour dvelopper avec iOS, il faut : MAC OS X Snow Leopard La certification iOS dveloppeur (pour publier votre app) Xcode Le SDK (kit de dveloppement) de PhoneGap
Pour dvelopper sous Android, il faut : Eclipse 3.4+ Le SDK Android Le plugin ADT pour Eclipse (Outils de developpement Android) Le SDK de PhoneGap
Pour dvelopper pour Windows Phone, il faut : Windows 7 ou Vista SP2 Le SDK des Windows Phone Le SDK de PhoneGap
84
Annexes :
mulateurs mobiles
iPhone Tester : http://iphonetester.com Vous trouverez une liste plus complte cette adresse : http://www.mobilexweb.com/emulators
Sites et blogs
Site et documentation officiel de jQuery Mobile : http://jquerymobile.com Documentation officiel de jQuery : http://api.jquery.com Mobile-tuts! : site d'actualits et de tutoriels autour des technologies mobiles Slecteurs jQuery : Une liste complte de slecteurs jQuery est disponible l'adresse : http://jquery.developpeurweb2.com/documentation/selecteurs.php Fonctions de manipulation du DOM : Une liste complte de fonctions de manipulation du DOM est disponible l'adresse : http://jquery.developpeurweb2.com/documentation/manipulation.php jQM Offline : http://www.raymondcamden.com/index.cfm/2011/3/12/Building-an-offlinecapable-mobile-web-site-with-jQuery-Mobile jQM Developement tips: http://www.jquery4u.com/mobile/50-jquery-mobiledevelopment/ jQuery Mobile Running : http://www.amazon.com/jQuery-Mobile-RunningMaximiliano-Firtman/dp/1449397654
85
Rfrences
1. International Telecommunication Union (ITU). TheWorldin2011ICTFactsand Figures, Novembre 2011 : http://www.itu.int/ITUD/ict/facts/2011/material/ICTFactsFigures2011.pdf
2. J. Chaffer & K. Swedberg. JQuery:SimplifiezetenrichissezvosdveloppementsJavaScript, du titre original Learning jQuery 1.3. Traduit de l'amricain par Herv Soulard. ISBN original : 978-1-847196-70-5. ISBN de la traduction : 978-2-7440-2381-1
86