Fiche Javascript :

Objet de la fiche :

État de la fiche En cours


Plan de la fiche :

Avant propos :

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
Ma voiture
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.

Syntaxe et propriétés spécifiques

<progress (propriété générales) (propriétés spécifiques)></progress>

Propriétés Commentaires
maxValeur maximale de la barre de progression
positionPourcentage d'avancement de la barre de progression (lecture seule)
valueValeur 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

  • EventTarget.addEventListener() : supervision d'évènements spécifiques.
  • 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ésCommentaires
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.
MethodesCommentaires
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.

Interface FileWriter()

Propriétés et méthodes

Interface FileSystem()

Propriétés et méthodes

Application au projet de site web



Respectons la propriété intellectuelle