développement xhtml/css...

15
Éric Sarrion Développement XHTML/CSS & JavaScript pour le web mobile Des sites efficaces pour iPhone et Android avec iUI et XUI © Groupe Eyrolles, 2010, ISBN : 978-2-212-12775-1

Upload: others

Post on 18-Apr-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

É r i c S a r r i o n

DéveloppementXHTML/CSS & JavaScriptpour le web mobile

Des sites efficaces pour iPhone et Android

avec iUI et XUI

© Groupe Eyrolles, 2010, ISBN : 978-2-212-12775-1

À qui s’adresse ce livre ?Ce livre est destiné aux développeurs qui doivent réaliser un site web pour plate-forme mobile, en particulier pour iPhone ou Android. En réalité, tous les mobilesdisposant du moteur WebKit sont susceptibles de fonctionner avec les programmesde cet ouvrage (y compris les Blackberry).

Structure de l’ouvrageCe livre se divise en quatre parties.• La première partie sert à rappeler les connaissances HTML, CSS et JavaScript

nécessaires pour le développement de ce type d’applications. Seules les parties uti-les seront expliquées ici, et ces notions seront présentes tout au long de l’ouvrage.

• La deuxième partie concerne l’étude complète de la bibliothèque iUI, spéciale-ment écrite pour le développement d’applications pour téléphones mobiles.

• La troisième partie sera consacrée aux autres éléments nécessaires pour effectuerdes développements web pour mobiles : les bases de données côté client, GoogleMaps et le GPS, le multi-touch ainsi que le graphisme.

• La dernière partie concerne l’étude de la bibliothèque XUI, développée spéciale-ment pour l’utilisation sur mobiles par Nitobi. Très compacte (moins de 7 Ko),elle est similaire à jQuery par sa puissance.

Avant-propos

Développement web mobile avec HTML/CSS et JavaScript, iUI et XUIVI

Compatibilité des programmes entre iPhone et AndroidTous les programmes de ce livre ont été testés sur les mobiles iPhone et Android. Lecode écrit est compatible avec ces deux environnements, mais il nous semble utiled’apporter certaines précisions.

Tous les programmes de ce livre fonctionnent avec au minimum la version 3 del’iPhone. Avec Android, si vous utilisez la version 2, tout fonctionne également ;dans une version antérieure (la version 1.6), des fonctionnalités sont indisponibles :• l’accès aux bases de données en local ne fonctionne pas, ainsi que l’accès à la varia-

ble sessionStorage ;• le multi-touch ne prend pas en compte les appuis simultanés avec deux doigts sur

l’écran. Ainsi, les événements dits gesture ne fonctionnent pas ;• la prise en compte du GPS ne fonctionne pas même si celui-ci est actif sur le

mobile, du fait de la version du navigateur utilisée dans cette version d’Android.

Table des matières

PREMIÈRE PARTIE

Rappels XHTML, CSS et JavaScript ................................1

REMARQUE Pourquoi rappeler ce que l’on connaît déjà ? . . . . . . . . . . . . . . . . . . . . . . . . . . 1

CHAPITRE 1HTML............................................................................................... 3

HTML OU XHTML ? Ici, c’est pareil ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3Notions générales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

Balises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Forme générale d’une page HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5Visualisation d’une page HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6ASTUCE Et pour Android, utile ou pas ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

Le texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8Les images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

ASTUCE Pour ne pas agrandir trop ? max-height et max-width ! . . . . . . . . . . . . . . . . . . 10Les liens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

COMPATIBILITÉ Et avec les sites web classiques ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Les listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12Les blocs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

CHAPITRE 2CSS ................................................................................................ 15

Insertion des styles CSS dans une page HTML . . . . . . . . . . . . . . . . . . . . . . . . . . 15ALTERNATIVE Utiliser l’attribut style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Principaux styles CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17L’arrière-plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17Le texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18La police de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Les bordures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Développement web mobile avec HTML/CSS et JavaScript, iUI et XUIVIII

ATTENTION Ne pas oublier de définir la taille de la bordure ! . . . . . . . . . . . . . . . . . . . . . . 20Les espacements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21Le positionnement des éléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21La taille des éléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22Le mode d’affichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23Les listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

Sélecteurs CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23Sélecteurs simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24Sélecteurs d’attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24Sélecteurs de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25Sélecteurs d’id . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26Pseudo-classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

:link et :visited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27:focus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27:nth-child(an+b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27:nth-last-child(an+b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28:only-child. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29:not . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

Combinateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Combinateur de descendance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Combinateur filial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30Combinateur d’adjacence directe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30Combinateur d’adjacence indirecte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

CHAPITRE 3JavaScript ..................................................................................... 31

Insertion de code JavaScript dans une page HTML . . . . . . . . . . . . . . . . . . . . . . 31Inclusion directe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31Inclusion par fichier externe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Syntaxe de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32Commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

Variables globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33Variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35Boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

Boucle for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35Boucle while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36Boucle do while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

Table des matières IX

Définir une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37Appeler une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

Création d’objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Tableaux de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39Accès au DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

Accès à un élément par son id . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40Accès à un élément par un sélecteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Création d’un élément dans l’arborescence . . . . . . . . . . . . . . . . . . . . . . . . . . . 42Suppression d’un élément dans l’arborescence . . . . . . . . . . . . . . . . . . . . . . . . . 44

Listeners pour gérer des événements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45Transformations CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Propriété -webkit-transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Propriété -webkit-transition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48SYNTAXE Propriétés de l’objet event pour webkitTransitionEnd . . . . . . . . . . . . . . . . . . . 50Propriété -webkit-animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50SYNTAXE Propriétés de l’objet event pour l’événement webkitAnimationStart et webkitAnimationEnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52NOTE Différence avec -webkit-transition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

DEUXIÈME PARTIE

iUI : une bibliothèque CSS et JavaScript pour mobiles .53

CHAPITRE 4iUI : installation et première application .................................. 55

Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55Application iPhone/Android de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

Exemple sous PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56REMARQUE Ordre d’insertion des styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58ET AUSSI Les autres thèmes CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58Exemple sous Ruby on Rails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59REMARQUE Où placer les fichiers ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

Paramétrages spécifiques à l’iPhone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61Rendre l’application accessible depuis le bureau de l’iPhone . . . . . . . . . . . . . . . 61REMARQUE Taille de l’icône . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61OUPS L’icône n’apparaît pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61Supprimer l’affichage de la barre d’adresse du navigateur . . . . . . . . . . . . . . . . . 61ATTENTION Où insérer la balise <meta> ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62Définir une image affichée au démarrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62ATTENTION Où insérer la balise <link> ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

Développement web mobile avec HTML/CSS et JavaScript, iUI et XUIX

CHAPITRE 5iUI côté CSS .................................................................................. 63

Créer la barre d’outils de l’application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63Créer les fenêtres de notre application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

TERMINOLOGIE Page ou fenêtre ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64Passer d’une fenêtre à l’autre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

REMARQUE Utiliser des effets sur les fenêtres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67Afficher des listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67Grouper les informations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72Afficher des boutons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

REMARQUE Pourquoi utiliser un lien <a> ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78Fenêtres superposées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81Formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88Extensions iUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

REMARQUE Extensions obligatoires ou non ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91Installation des extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91Utilisation des listes de sélection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93Utilisation des listes de sélection triées par ordre alphabétique . . . . . . . . . . . . . 96Gestion de calendriers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99INTERNATIONALISATION Quelle langue voulez-vous ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100Remplacer les cases à cocher par des interrupteurs . . . . . . . . . . . . . . . . . . . . . 102REMARQUE Et si on n’est pas dans un formulaire ? . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

Changer de thème CSS avec theme-switcher . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

CHAPITRE 6iUI côté JavaScript ..................................................................... 111

Fonctionnement de base des liens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111Exemples d’utilisation des attributs des liens . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

Aller vers une autre fenêtre décrite dans la page HTML . . . . . . . . . . . . . . . . 113REMARQUE Et si des fenêtres n’existent pas ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114Afficher une nouvelle fenêtre non encore présente dans la page HTML . . . . 114ASTUCE Il est préférable de donner un id à la fenêtre ! . . . . . . . . . . . . . . . . . . . . . . . . 115Aller vers une autre page HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115Soumettre un formulaire et afficher une nouvelle fenêtre (sans utiliser les extensions iUI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115MODIFICATION Où est la différence ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116Soumettre un formulaire et afficher une nouvelle fenêtre (en utilisant les extensions iUI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119REMARQUE Et si le bogue de iUI n’a pas été corrigé ? . . . . . . . . . . . . . . . . . . . . . . . . . . 123Afficher la suite des éléments d’une liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

Méthodes JavaScript utilisables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

Table des matières XI

ASTUCE Bien utiliser ces méthodes... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128showPageById (pageId) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129goBack () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129showPageByHref (href, args, method, replace, cb) . . . . . . . . . . . . . . . . . . . . 129ajax (url, args, method, cb) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129insertPages (frag) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130getSelectedPage () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130hasClass (self, name) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130addClass (self, name) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130removeClass (self, name) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

Exemples d’utilisation des méthodes JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . 131Créer un bouton permettant d’aller, selon les cas, sur des fenêtres différentes (1re méthode) . . . . . . . . . . . . . . . . . . . . . . . . . . 131ASTUCE Définir la fonction $(id) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133ATTENTION onclick ou addEventListener ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134Créer un bouton permettant d’aller, selon les cas, sur des fenêtres différentes (2e méthode) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134Effectuer un appel Ajax (1re méthode) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136Effectuer un appel Ajax (2e méthode) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139Créer une nouvelle fenêtre dynamiquement . . . . . . . . . . . . . . . . . . . . . . . . . 141

Événements associés aux fenêtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144Séquence de déclenchement des événements . . . . . . . . . . . . . . . . . . . . . . . . . . . 145Exemple d’utilisation des événements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

TROISIÈME PARTIE

Bases de données, multi-touch, graphisme, GPS et Google Maps ...................................................153

CHAPITRE 7Bases de données côté client.................................................... 155

Stockage permanent et stockage dans la session . . . . . . . . . . . . . . . . . . . . . . . . . 155Utilisation d’une base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

Création de la base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158ASTUCE Supprimer une base de données sur iPhone . . . . . . . . . . . . . . . . . . . . . . . . . . 158Utilisation de la base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159ATTENTION Et si la requête SQL échoue ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160Exemple d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

Développement web mobile avec HTML/CSS et JavaScript, iUI et XUIXII

CHAPITRE 8Multi-touch ................................................................................ 165

Événements touch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165Propriétés des événements touch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

REMARQUE Que contient changedTouches ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168Exemple d’utilisation : déplacement d’un objet à l’écran . . . . . . . . . . . . . . . . . . 172Événements gesture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

REMARQUE Utilisation de preventDefault () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176Propriétés des événements gesture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176Premier exemple d’agrandissement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178Second exemple d’agrandissement, à partir du centre . . . . . . . . . . . . . . . . . . . . 179Exemple de rotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

CHAPITRE 9Graphisme.................................................................................. 185

Principe de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185REMARQUE 2D ou 3D ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

Formes géométriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186Tracer une ligne puis des formes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186Tracer une forme puis la remplir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187Chemins : délimiter la portée des instructions . . . . . . . . . . . . . . . . . . . . . . . . 189Rectangles : les méthodes dédiées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191Arcs de cercle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193REMARQUE Quand utiliser closePath () et beginPath () ? . . . . . . . . . . . . . . . . . . . . . . . 195Courbes quadratiques et courbes de Bézier . . . . . . . . . . . . . . . . . . . . . . . . . . 196

Gestion des couleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198Couleurs des lignes, du fond et opacité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198Dégradés de couleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

Formes des lignes : épaisseur, terminaison, jonction . . . . . . . . . . . . . . . . . . . . . 203Épaisseur des lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203Embouts des lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203Jointures entre les lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

Traitement des images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204Insertion d’images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204ATTENTION Comment et quand insérer l’image ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205Images redimensionnées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206Images découpées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

Translations, rotations, agrandissements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209Superpositions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211Clipping : délimiter une zone inscriptible du canevas . . . . . . . . . . . . . . . . . . . . 213

Table des matières XIII

Gestion des états du canevas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216ASTUCE Bien utiliser les états . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216ATTENTION Utilisation de ctx.save () et ctx.restore () . . . . . . . . . . . . . . . . . . . . . . . . . . 217

CHAPITRE 10Cartes Google Maps et GPS ...................................................... 219

Insertion de code Google Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219Utilisation de Google Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

ASTUCE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223Utilisation du GPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

QUATRIÈME PARTIE

XUI : une bibliothèque jQuery pour mobiles ...........227

CHAPITRE 11La bibliothèque XUI................................................................... 229

Installation de XUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229Aperçu de XUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230Méthode et objet x$() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

Méthode x$() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230Objet x$ () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

Propriété elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233Parcours des éléments de la collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

Parcours classique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234Parcours par each () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

Enchaînement des méthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236REMARQUE Y a-t-il des exceptions ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236

Accès au DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237Méthode inner () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237Méthode outer () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237Méthode top () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238Méthode bottom () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Méthode remove () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240Méthode clean () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

Exemples d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240Remplacement du contenu des éléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242Insérer dans les éléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

Gestion des styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245Méthode setStyle () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245Méthode css () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246

Développement web mobile avec HTML/CSS et JavaScript, iUI et XUIXIV

CODAGE Règles pratiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247Méthode getStyle () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247Méthode addClass () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248Méthode removeClass () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

Exemples d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248Modifier les styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249Ajouter une classe CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

Gestion des événements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251Exemple d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252Effets visuels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

Options principales des effets visuels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254Option by . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254Options before () et after () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255Option easing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256Quelle forme utiliser pour la méthode tween () ? . . . . . . . . . . . . . . . . . . . . . . 257

Exemples d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258Apparition et disparition progressive : appear et fade . . . . . . . . . . . . . . . . . . . 258Optimisation des effets appear et fade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259Troisième forme d’écriture pour appear et fade . . . . . . . . . . . . . . . . . . . . . . . 262Enchaînements d’effets : fadeAndAppear . . . . . . . . . . . . . . . . . . . . . . . . . . . 263Spécifier une séquence de fadeAndAppear . . . . . . . . . . . . . . . . . . . . . . . . . . 265

Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

Conclusion : vers des applications natives.............................. 269

Index........................................................................................... 271

Index&gt 8&lt 8&nbsp 8:focus 27:link 27:not 29:nth-child(an+b) 27:nth-last-child(an+b) 28:only-child 29:visited 27<a> 10, 111<b> 8<br /> 8<canvas> 185<div> 13<fieldset> 72, 76<form> 82, 88<h1> 8<h2> 76<hr /> 8<i> 8<img /> 9<input> 88<label> 72<li> 12, 67<link> 15<ol> 12<p> 8<script> 31<select> 89<span> 13, 72<style> 15<textarea> 88<ul> 12, 67@-webkit-keyframes 51_replace 112

_self 132_webapp 112

Aabsolute 21addClass () 248addClass (self, name) 130addColorStop (position, color) 200addEventListener () 45after () 255afterinsert 145aftertransition 145ajax (url, args, method, cb) 129animationName 52appendChild 42AppServ 6arc (x, y, rayon, angleDebut, angleFin, sens) 193Array 39Attributs 4az 96

BbackButton 63background-color 18background-image 17Balises 4before () 255beforeinsert 145beforetransition 144beginPath () 190bezierCurveTo (cp1x, cp1y, cp2x, cp2y, x, y) 196blueButton 82blur 144border-color 19border-style 19border-width 19bottom () 239

Développement web mobile avec HTML/CSS et JavaScript, iUI et XUI272

button 63by 254

Ccancel 111changedTouches 168clean () 240clearRect (x, y, width, height) 192clip () 214closePath () 190color 18Combinateur

d’adjacence directe 30d’adjacence indirecte 30de descendance 29filial 30

createElement 42, 43createLinearGradient (x1, y1, x2, y2) 200CSS 15css () 246

Ddate 100default. 256dialog 82disabled 106display 23do while 36DOM (Document Object Model) 40drawImage

(image, sx, sy, swidth, sheight, dx, dy, dwidth, dheight) 207

(image, x, y) 204(image, x, y, width, height) 206

duration 254

Eeach () 235ease-in 256ease-in-out 256ease-out 256easing 256elapsedTime 50, 52elements 233else 35

Événementsassociés aux fenêtres 144gesture 174touch 165

executeSql 159Extensions iUI 91

Ffill () 187fillRect (x, y, width, height) 191fillStyle 198focus 144Fonctions 37font-family 19font-size 19font-style 19font-weight 19for 35future 100

Ggeolocation 224gesturechange 174gestureend 174gesturestart 174getContext("2d") 186getCurrentPosition (ok_callback,

echec_callback) 224getElementById (id) 40getSelectedPage () 130getStyle () 247globalAlpha 199globalCompositeOperation 211goBack () 129Google Maps 219Graphisme 185grayButton 78group 71

HhasClass (self, name) 130height 10, 22href 10HTML 3

Index 273

Iidentifier 168if 35inner () 237insertBefore 42insertPages (frag) 130item 163iUI 55

JJavaScript 31JavaScript Object Notation 38JSON 38

Llength 40letter-spacing 18linear 256lineCap 203lineJoin 204lineTo (x, y) 187lineWidth 203listeners 45list-style-type 23load 144localStorage 156

Mmailto 11MAMP 6Maps 221margin 21Masabi 91max-height 22max-width 22min-height 22min-width 22moveTo 187multi-touch 165

Oobject 38objets 38opacity 23openDatabase 158

out 144outer () 237overflow 23

Ppadding 21pageTitle 57, 63panel 73, 84past 100PhoneGap 269position 21preventDefault 167propertyName 50Pseudo-classes 27

QquadraticCurveTo (cp1x, cp1y, x, y) 196querySelectorAll (selecteur) 41

RredButton 78relative 21remove () 240removeChild (fils) 44removeClass () 248removeClass (self, name) 130restore () 216rotate 46

radians 209rotation 176row 72, 163

Ssave () 216scale 46, 176scale (x, y) 210screenX 169screenY 169selected 65Sélecteurs

d’attributs 24d’id 26de classe 25simples 24

sessionStorage 156

Développement web mobile avec HTML/CSS et JavaScript, iUI et XUI274

setStyle () 245setTheme(title) 106showPageByHref (href, args, method, replace,

cb) 129showPageById (pageId) 129skew 46sms 11src 10stroke () 187strokeRect (x, y, width, height) 191strokeStyle 198submit 111

TTableaux 39tel 11text-align 18text-decoration 18text-transform 18theme-switcher 105this 39title 57today 100toggle 103toggleOff 103toggleOn 103toolbar 63top () 238touchend 166touches 168touchmove 166touchstart 166transaction 159

Transformations CSS 46translate 46translate (x, y) 209tween () 253

VVariables

globales 33locales 34

W-webkit-animation 50webkitAnimationEnd 52webkitAnimationStart 52-webkit-border-image 20-webkit-border-radius 20-webkit-border-top-left-radius 20-webkit-transform 46-webkit-transition 48webkitTransitionEnd 50-webkit-user-select 167while 36whiteButton 78width 10, 22word-spacing 18

Xx$() 230xhr () 267XUI 229

Zz-index 23zoom 22