Le Html5 est une évolution de portée considérable qui modifie totalement la conception des pages et applications Web. On va aborder ici quelques unes de ces API sous fourme pratique avec de nombreux exemples. D'autres API et particulièrement celles liées à l'audio, à la vidéo et au glisser/coller seront abordées dans les fiches suivantes.
Custom Data Attributes
Rappel
HTML5 permet d'écrire librement tout attribut débutant par data- et ainsi associer des données personnalisées directement dans un élément HTML.
La propriété dataset permet d'interagir avec ces données. Chaque attribut data est membre de dataset.
Exemple simple
Exemple
Survolez l'image
Code
JAVASCRIPT
Nous venons de voir comment lire ces attributs, mais il est aussi possible :
de les modifier : document.getElementById('img_data').dataset.lieu = "Fontainebleau";
de les supprimer : document.getElementById('img_data').dataset.date = null;
Remarque
L'API dataset n'étant pas à l'heure actuelle implémentée de façon universelle, on peut utiler l'autre alternative JavaScript, à savoir l'accès classique aux attributs quels qu'ils soient (getAttribute et setAttribute) et pourquoi pas ceux débutant par data-.
Pour lire un attribut : var lieu = document.getElementById('img_data').getAttribute('data-lieu');
Pour modifier un attribut : document.getElementById('img_data').setAttribute('data-lieu') = "Fontainebleau";
Pour supprimer un attribut : document.getElementById('img_data').removeAttribute('data-date');
La balise progress
But
La balise "progress" permet d'afficher l'état d'avancement d'une tâche ou d'une action à l'aide d'une barre de progression.
javascript va nous permettre d'animer cette barre.
Pourcentage d'avancement de la barre de progression (lecture seule)
value
Valeur actuelle de la progression
Exemple simple
Exemple
40 %
Code
HTML
JAVASCRIPT
CSS
Evènements concernant les animations : API AnimationEvent
CSS3 permet de mettre en oeuvre des animations très efficaces en termes de richesse, fluidité et rapidité, mais une fois les styles déclarés on perd le contrôle des différentes "frame". Heureusement, l'interface AnimationEvent nous apporte des informations sur les animations CSS en cours.
Attention : Ces fonctionnalités sont encore expérimentales et en cours d'évolution. Elles peuvent donc ne pas fonctionner sur certains navigateurs.
Le gestionnaire d'évènements
Les évènements disponibles
Trois types d'évènements sont disponibles durant le déroulement de l'animation.
Gestionnaires
Commentaires
.animationstart
Cet évènement est disponible lorsque l'animation démarre pour la première fois. Pour cette phase elapsedTime donne 0.0
.animationiteration
Cet évènement est disponible chaque fois qu'une animation démarre (répétitions par exemple). On peut ainsi récupérer le temps de chaque animation avec elapsedTime.
.animationend
Cet évènement est disponible chaque fois qu'une animation se termine. On peut ainsi récupérer le temps de chaque animation et le temps total des diverses animations avec elapsedTime.
Propriérés de l'interface AnimationEvent
Toures ces propriétés sont en lecture seule.
Propriétés
Commentaires
AnimationEvent.type
représente le nom du type de l'évènement lié à AnimationEvent. Cela peut être : 'animationstart', 'animationend', ou 'animationiteration'.
AnimationEvent.animationName
contient la valeur de la propriété CSS animation-name associée à la transition.
AnimationEvent.elapsedTime
donne le temps (nombre à virgule flottante) pendant lequel l'animation s'est déroulée, en secondes, quand l'évènement est déclenché, en excluant tous les temps de pause.
AnimationEvent.pseudoElement
chaîne démarrant avec '::' et contenant le nom du pseudo-élément où l'animation se déroule. Si l'animation ne se déroule pas sur un pseudo-élément, mais sur un élément, la chaîne de caractères sera vide.
Déclaration des évènements
C'est la déclaration classique avec addEventListener
Reprenons l'exemple purement CSS3 de la fiche CCS_HTML5
Partie html
Partie CSS
Remarques sur le code
Relancer une animation avec javascript :
Il n'existe pas de méthode pour relancer une animation lorsqu'elle est terminée. L'astuce consiste à supprimer la classe associée à l'élément, puis à la redéfinir, ce qui oblige le DOM à se remettre à jour et ainsi re-exécuter l'animation. Pour cela on va utiliser la méthode toggle de classList Si la classe blop est affectée, on la retire et on retourne false; Sinon, on l'ajoute et retourne true.
resultClassList = anim.classList.toggle("blop");
événement animationiteration :
Notez que lors de la fin de l'animation, l'événement animationiteration n'est pas envoyé, seul animationend est déclenché.
La balise canvas
Tracer des formes simples (droites, rectangles)
Accés aux fichiers locaux : API Files
HTML5 met à disposition une API standard pour interagir avec les fichiers locaux au travers des spécifications de l'API files.
Il existe 3 niveaux de l'API File:
File API: Reader ou autrement appelé FileReader API pour lire des fichiers locaux,
File API: Writer ou autrement appelé FileWriter API pour créer, sauvegarder ou modifier des fichiers locaux,
File API: Directories ou autrement appelé FileSystem API pour effectuer toutes opérations sur des répertoires (créer, renommer, effacer, copier, déplacer, etc.
Interface File : File objects et Blob objects
Généralités
Propriétés
object.size : taille du fichier.
object.name : le nom du fichier.
object.type : type MIME du fichier.
object.lastModifiedDate : date de la dernière modification.
Interface FileReader()
Possibilités
Lire(via l'interface FileReader) un fichier ou les données d'un fichier à n'importe quelle position d'octet.
Syntaxe
var reader = new FileReader();
var f = files[i] // fichiers objets
EventTarget.removeEventListener() : suppression de la supervision d'un évènement.
EventTarget.dispatchEvent() : Envoie un évènement dans le système d'évènements.
Propriétés et méthodes
Propriétés
Commentaires
reader.readyState
peut valoir EMPTY (vide), LOADING (chargement), DONE (terminé).
reader.result
le contenu du fichier a été lu.
reader.error
type d'erreur détectée.
onloadstart
évènement disponible au démarrage de la lecture du fichier.
onprogress
évènement disponible cycliquement durant le chargement du fichier: il fournit,aussi, un objet en paramètre possédant deux propriétés, loaded et total, indiquant respectivement le nombre d'octets lus et le nombre d'octets à lire en tout.
onload
évènement disponible lorsque toutes les données ont été chargées.
onabort
évènement disponible lorsque la lecture a été interrompue.
onerror
évènement disponible lorsque la lecture a échouée.
onloadend
évènement disponible lorsque la requête est terminée avec succés ou erreur.
Methodes
Commentaires
reader.abort()
arrêt de la procédure de chargement.
reader.readAsDataURL(f)
lit le fichier et retourne sous forme d'URL les données codées en base64. Les données sont converties dans un format nommé DataURL. Ce format consiste à convertir toutes les données binaires d'un fichier en base64 (voir fiche Conversion 64 bits. Cette méthode est particulièrement intéressante pour initialiser la propriété src d'une balise image pour affichier la photo correspondande aux données
reader.readAsText(f,option)
Récupère le contenu du fichier f sous forme de texte. On associer un paramètre optionnel qui défini le format des informations récupérées. Par défaut, UTF-8 est utilisé si le paramètre optionnel n'est pas défini. Les données ne subissent aucune modification, elles sont tout simplement lues puis stockées sous forme d'une chaîne de caractères.
reader.readAsArrayBuffer(f)
cette methode permet de lire un Blob (note1) ou un Fichier et retourne une ArrayBuffer (tableau typé voir note2) : type de données générique pour représenter un tampon de données de longueur fixe. Stocke les données dans un objet de type ArrayBuffer.Ces objets ont été conçus pour permettre l'écriture et la lecture de données binaires directement dans leur forme native,
reader.readAsBinaryString(f)
cette méthode peut être utilisées pour lire n'importe quel type de fichier. La méthode retourne les données binaires brutes d'un fichier. Associé à XMLHttpRequest.sendAsBinary() (Voir la fiche AJAX) il est facile d'uploaded n'importe quel fichier du serveur avec peu de code javascript.
Note1 les Blob
Définition
Structure
Convertir un blob en fichier
La particularité des objets File est qu'ils héritent des propriétés et méthodes des objets Blob, donc en plus des propriétés et méthodes des objets Blob, les objets File possèdent deux propriétés supplémentaires qui sont name pour obtenir le nom du fichier et lastModifiedDate pour obtenir la date de la dernière modification du fichier (sous forme d'objet Date).
note2 les tableaux typés
Exemples
On va utiliser l'élément HTML Input qui est une extensions (comme le sont Form, Select, Embed, etc) de la classe centrale HTMLElement pour sélectionner les fichiers.
Avec readAsDataURL
Avec readAsText
Avec readAsArrayBuffer
Avec readAsBinaryString
JavaScript retourne la liste des fichiers sélectionné sous forme d'une FileList.