Géolocalisation HTML5

La géolocalisation fait partie des API gravitant autour de HTML5 (Geolocation API Specification) et des nouvelles fonctionnalités introduites par la mobilité.
Il permet au navigateur de pointer votre emplacement actuel. L'API nous permet soit d'effectuer une suivi sur une base ponctuelle ou continu, qui peut être utile dans les situations où le visiteur de votre site est en mouvement.

D'ailleurs, nous allons voir un exemple de code minimal de cette API (Géolocalisation HTML5) avant d'entrer dans les options disponibles.
Voici la démonstration la plus simple exemple que je peux gérer:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>Géolocalisation HTML5</title>
</head>
<body>
 
<script> 
(function(geo){
  if(geo){
    geo.watchPosition(function(location) {
      console.log(location);
    });
  }
})(navigator.geolocation); 
</script>
 
</body>
</html>
Collez ce code dans une page HTML vide, et l'afficher dans le navigateur. Toutefois, vous pouvez constater que rien n'est affiché au navigateur.

Pour que la géolocalisation html5 fonctionne correctement vous devez soit enregistrer le fichier sur votre hébergeur, ou utilisez votre localhost pour accéder à la page - comme WAMP, XAMPP, MAMP, ....

Une fois que vous déplacer le fichier, recharger la page, et le navigateur demander l'accès à suivre votre position géographique.
Géolocalisation HTML5
Géolocalisation HTML5
Quand vous pensez à ce sujet : Après que je clique sur "Partager sa localisation", quelles sont les informations a-t-on besoin pour se géolocaliser ou bien quelles sont les informations partagés ?

D'ailleurs, la demande de la permission est nécessaire avant de suivre. Sinon, cela pourrait être un énorme problème de sécurité!
Ensuite, afficher la console, et vous trouverez un objet, qui contient quelque informations:
Géolocalisation HTML5
L'API donne aussi accès lorsqu'il y a déplacement à la vitesse et à la direction (en ° par rapport au nord géographique).

Test

Comme avec toutes les nouvelles API, nous devons d'abord déterminer si l'API y reconnaît par le navigateur. Comme vous l'avez appris dans l'article de la détection (Feature Detection HTML5).
le test de la géolocalisation html5 est très simple:
if ( navigator.geolocation ) alert('Géolocalisation HTML5 fonctionne :)');
// Ou, avec Modernizr:
if ( Modernizr.geolocation ) alert('Géolocalisation HTML5 fonctionne :)');

Les deux méthodes de base:

L'API Géolocalisation est composé de deux méthodes principales:
1. getCurrentPosition : permettant un ciblage ponctuel
2. watchPosition : pour un suivi continu
Ces deux méthodes sont très semblables, à l'exception watchPosition continuer à mettre à jour votre code. Naturellement, cela devrait être utilisé dans des situations où la position de l'utilisateur est changée en permanence.

getCurrentPosition()

Ces deux méthodes acceptent un, deux, ou trois arguments.
1. successCallback : exécuter lorsque le navigateur suivi le visiteur.
2. ErrorCallback : exécuter si la tentative de suivre le visiteur échoue.
3. PositionOptions : facultatif objet pour les options enableHighAccuracy, timeout, et maximumAge.

Ces arguments peuvent être appliquées, comme ceci:
navigator.geolocation.getCurrentPosition (successCallback, errorCallback, {
  enableHighAccuracy: true, 
  timeout: 15000, 
  maximumAge: 0
});
Vous pouvez tester ce code pour récupérer votre position:
if ( navigator.geolocation ) { 
  navigator.geolocation.getCurrentPosition(function(emplacement) {
    console.log(emplacement);
  });
}
Généralement, les deux propriétés dont vous avez besoin sont latitude et longitude. Nous pouvons identifier ces valeurs à la console, comme suit:
console.log( emplacement.coords.latitude, emplacement.coords.longitude);

watchPosition ()

Cela devrait être la méthode préférée dans la plupart des situations. La différence de base entre getCurrentPosition() et watchPosition() que la dernier continuera en gardant un œil sur la position de l'utilisateur.
watchPosition() retourner une valeur qui identifie la position actuelle. Cela peut être utilisé pour effacer ou stopper ce suivi continu, on utilise la méthode clearWatch():
var watch = navigator.geolocation.watchPosition(function(location) { 
});
// Plus tard
navigator.geolocation.clearWatch(watch);
console.log(watch);

Options

enableHighAccuracy : Obtient une position plus précise via GPS.
navigator.geolocation.watchPosition(successCallback, errorCallback, { 
  enableHighAccuracy: true
});
timeout : Durée avant renvoi vers la function d'erreur.
navigator.geolocation.watchPosition(successCallback, errorCallback, { 
  timeout: 15000 // quinze secondes
});

maximumAge : Durée de la mise en cache de la position actuelle de l'utilisateur. Si maximumAge : 0, donc pour chaque chargement de page, une nouvelle position seront acquises. Sinon, après la première demande, le navigateur attendre l'expiration de maximumAge et initialiser une nouvelle position.
navigator.geolocation.watchPosition(successCallback, errorCallback, { 
  maximumAge: 1000 * 60 * 60 // une heure
});

Contrôler le lecteur vidéo HTML5 avec JavaScript

En plus des contrôles intégrés, nous pouvons également contrôler une vidéo avec la nouvelle API médias de HTML5.
Contrôler le lecteur vidéo HTML5 avec JavaScript
Contrôler le lecteur vidéo HTML5 avec JavaScript

Detection:

Détecter si le navigateur support les balise <video> et <audio> est simple (Feature Detection HTML5).
Nous avons seulement besoin de déterminer si la méthode "canPlayType" est disponible.
Si le navigateur reconnaît la balise <video>, il a également reconnaît la balise <audio>. 
Tous les navigateurs qui reconnaissent une, sera également reconnaître l'autre.
if ( 'canPlayType' in document.createElement('video') ) {
  // Code
}
if ( 'canPlayType' in document.createElement('audio') ) {
  // Code
}
Ou bien:
var supportMedia = (function() {
  return ('canPlayType' in document.createElement('video'));
})();
if ( supportMedia ) { 
  // Code
}
Si vous utilisez Modernizr, vous pouvez écrit:
if ( Modernizr.video ) { ... }
if ( Modernizr.audio ) { ... }
Dans certains cas, il est aussi utile de déterminer si les navigateurs reconnaissent un codec particulier(mp4, webm, ogg, ...). Est-il possible?
Oui bien sûre. Modernizr fournit une solution élégante. Par exemple:
Modernizr.video  // navigateur prend en charge la balise video
Modernizr.video.webm // navigateur prend en charge le format WebM
Modernizr.video.h264 // navigateur prend en charge le format H.264
Les API HTML5 audio et vidéo sont identiques. Donc on pourra tester le support de l'audio avec:
Modernizr.audio.mp3
Modernizr.audio.ogg
Modernizr.audio.wav

Méthodes:

Les méthodes disponibles pour les médias que ce soit audio ou video sont:

  • play() => commence ou continue la vidéo référencée.
  • pause() => pause la vidéo.
  • load() => récupérer une nouvelle ressource multimédia.
  • canPlayType() => détermine si le navigateur supporte un codec particulier.
Ces méthodes peuvent être utilisées, comme ceci:
var video = document.getElementById('video');
video.play();
video.pause();
video.canPlayType('audio/ogg');

événements:

  • play: Lorsque la vidéo est lancée.
  • pause: Lorsque la vidéo est en pause.
  • ended: Lorsque la vidéo est terminée.
  • progress: Lorsque les médias ont été récupérées.
  • canplay: Lorsque la vidéo a été entièrement chargées.

attributs:

  • duration: La durée de la vidéo associée.
  • currentTime: La position actuelle de la vidéo. Par exemple, lorsque la vidéo est en pause.
  • autoplay: Une valeur booléenne indiquant si la vidéo a été fixé à autostart.
  • poster: L'image d'affiche fourni.
  • paused: Une valeur booléenne indiquant si la vidéo est actuellement pause.
  • ended: Une valeur booléenne indiquant si la vidéo est terminée.

Prenons un exemple pratique:

HTML5:
<video id="video" width="500" height="500">
  <source src="video.mp4">
  <source src="video.webm">
  <source src="video.ogg">
</video>
<button id="button">Play</button>
JavaScript:
var video = document.getElementById("video"),
var button = document.getElementById("button");

// Lancer la vidéo lorsque le bouton est cliqué.
button.addEventListener('click', function() {
  video[video.paused ? 'play' : 'pause'](); 
}, false);

// Changer le text en Pause si la vidéo est lancée
video.addEventListener('play', function() {
  button.innerHTML = 'Pause';
}, false);

// Changer le text en Play si la vidéo en pause
video.addEventListener('pause', function() {
  button.innerHTML = 'Play';
}, false);

// Changer le text en Play si la vidéo est terminée
video.addEventListener('ended', function() {
  button.innerHTML = 'Play';
}, false);
JQuery:
var $video = $('#video'),
video = $video[0];

$video
.on('play', function() {
  $('#button').text('Pause');
})
.on('pause ended', function() {
  $('#button').text('Play');
});
$('#button').on('click', function() { 
  video[video.paused ? 'play' : 'pause']();
});

HTML5 Video

Nous avons maintenant la possibilité de fournir l'audio et lecture vidéo dans le navigateur. Avant, si nous voulons intégrer une vidéo dans un site web:
<object width="500" height="500"> 
  <param name="movie" value="URL"> 
  <param name="allowFullScreen" value="true"> 
  <param name="allowscriptaccess" value="always"> 
  <embed src="URL" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="500">
  </embed>
</object>
Probablement, vous n'avez jamais écrit manuellement ce code. La plupart des hébergeurs vidéo, tels que YouTube, offre une option "Embed" que vous pouvez la copier-coller.
Cependant, le support de la vidéo n'a pas été fournie natif dans le navigateur. Ce dernier passerait la vidéo à une plugin de type Flash.

Utilisation: 

 La balise <object> peut maintenant être remplacée par:
<video src="video.mp4"></video>
//ou bien:
<video>
  <source src="video.mp4"></source>
</video>
Support de navigateur:
html5 video
HTML5 video

Nous pouvons faire chaque navigateur heureux, en fournissant de multiples balises <source>:
<video> 
  <source src="video.mp4"> 
  <source src="video.webm">
  <source src="video.ogg">
</video>
Le navigateur va lire chaque balise dans l'ordre. Si ne le support pas, il passera à la suivante.

L'attribut "type" permet d'empêcher le navigateur de "renifler" chaque balise source, nous pouvons spécifier un type MIME.
<video>
  <source src="video.mp4" type="video/mp4"> 
  <source src="video.webm" type="video/webm">
</video>
De cette façon, le navigateur n'a pas besoin de télécharger le méta informations pour la vidéo. 
Mais, qu'est-ce qui se passe dans les navigateurs qui ne reconnaissent pas la balise vidéo?
Absolument rien. Nous pouvons fournir un lien pour ces situations.
<video>
  <source src="video.mp4">
  <source src="video.webm">
  <a href="video.mp4">Télécharger le vidéo</a>
</video>
Ce lien de téléchargement ne s'affiche que dans les navigateurs qui ne le support pas la balise video.

L'attribut "controls"

 Permet d'ajouter les boutons 'Lecture', 'Pause' et la barre de défilement.
<video controls>
  <source src="video.mp4">
  <source src="video.webm">
</video>

L'attribut "autoplay"

L'attribut 'autoplay' nous permet de lire la vidéo immédiatement lorsque la page est chargés:
<video controls autoplay> 
  <source src="video.mp4"> 
  <source src="video.webm">
</video>

L'attribut "poster"

Par défaut, l'image afficher de la vidéo sera la première affiche de la vidéo. L'attribut "poster" permet de spécifier une image personnalisée.
<video controls poster="image.jpg"> 
  <source src="video.mp4"> 
  <source src="video.webm">
</video>
Il peut être utilisé aussi dans des situations où les données vidéo n'est pas encore disponible  preload = none), le contenu ou la taille de la vidéo est vide.
<video preload=none controls poster="image.jpg">

L'attribut "loop"

La spécification de l'attribut "loop" permet de lire la vidéo en boucle automatiqument.
<video controls poster="image.jpg" loop> 
  <source src="video.mp4"> 
  <source src="video.webm">
</video>

L'attribut "preload"

Indique si la vidéo peut être préchargée dès le chargement de la page ou non. Cet attribut peut prendre les valeurs:
none: pas de préchargement. Indique au navigateur de commencer à charger la vidéo uniquement lorsque l'utilisateur active les contrôles.
auto(par défaut): le navigateur décide s'il doit précharger la vidéo.
meta: charge uniquement les métadonnées (durée, etc.).

Logiciel de conversion:


Feature Detection HTML5

Vous voulez savoir si le navigateur reconnaît les nouveautés HTML5, Allons-y. D'abord, je vous recommandons d'utiliser une bibliothèque appelée "modernizr" pour effectuer des tests de fonctionnalité, il est certainement important d'avoir une idée de ce qui se passe derrière la scène.

feature detection html5
Feature Detection HTML5
Quand nous essayons d'appliquer un type input que le navigateur ne le support pas, il sera toujours afficher l'input de type "texte". Pour tester si le navigateur prend en charge un type quelconque:
var input = document.createElement ('input');
input.setAttribute ('type', 'color');
if (input.type == 'color') {
  //Navigateur prend en charge ce type
}
Pour déterminer si un navigateur prend en charge un attribut:
if ('placeholder' in document.createElement('input')) {
  //Navigateur prend en charge l'attribut placeholder
}
Ce code détermine simplement si un attribut existe dans l'objet document.createElement('input'). C'est exactement la même chose que :
var langues = {
  francais : 'premier',
  anglais  : 'deuxieme'
};

if ('francais' in langues ) { ... }

Les balises:

audio et vidéo:

Presque tous les navigateurs modernes supportent la balise audio et vidéo. Nous pouvons encore fournir le test pour les anciens navigateurs. Nous pouvons tester des médias par la méthode "canPlayType":
if (document.createElement('audio').canPlayType) {
  // Mettez votre code ici
}
ou bien:
if ('canPlayType' in document.createElement('video')) {
  //Code
}

canvas:

Si nous avons besoin de tester le support de canvas :
if (document.createElement('canvas').getContext) {
  //recupérer votre canvas
}

Local storage:

Tester le support de LocalStorage est simple. Nous pouvons générer des erreurs utilisons le block try{...}catch{...}:
try {
  if ('localStorage' in window.localStorage != null)
    return true; 
} catch (e) {
    return false;
}
Ce code détermine si localStorage exists dans l'objet window. Si des erreurs se produisent dans le processus, il retourne false.

Autres API:

Le test pour les autres nouvelles API est plus ou moins le même processus.

if ( navigator.geolocation )
Offline
if ( window.applicationCache )
Web Workers
if ( window.Worker )
History
if ( window.history )
//ou bien
if ( window.history && history.pushState )

HTML5 Input Type


En plus de nouveaux attributs HTML5, nous avons aussi de nouveaux types de la balise <input />.
  • email
  • range
  • color
  • number 
  • datetime 
  • date 
  • month 
  • week
  • time
  • url 
  • tel
  • search


email:

Le type "email" autoriser uniquement la structure des adresse email valide.
<input type="email" >

input type email


range:

Le type "range" nous permet de créer un curseur native.
<input type="range" >
input type range

Plus particulièrement, il peut recevoir des attributs: min, max, step, et value, etc.
Pour une démonstration rapide, nous allons prendre un exemple:
HTML5:
<input type="range" id="range" min="0" max="10" step="2" value="0"> 
<output for="range"></output>
Maintenant, nous allons utiliser JavaScript/JQuey pour définir la valeur rendu.
JavaScript:
var range = document.querySelector('#range'), 
output = range.nextElementSibling;
output.value = range.value;
range.addEventListener('change', function() {
  output.value = range.value; 
});
JQuery:
var range = $('#range'),
output = range.siblings('output');
output.val( range.val() );
range.on('change', function() {
  output.val( range.val() ); 
});
La valeur produit correspondant à ce nous avons spécifié dans l'attribut "range".


number:

Permet de saisir seulement des chiffres, peut-être lorsque vous avez besoin de l'âge ou d'un numéro quelconque.
<input type="number" >
input type number

Vous pouvez changer le style de ce type, on utilise le sélecteur:
input::-webkit-inner-spin-button { 
  /* votre style */
}


date:

Le type "date" nous donne la possibilité d'indiquer aux utilisateurs de sélectionner une date valide.
<input type="date" >
Quelques options de ce type:
min:
Certains sites vous obligent à choisir une date dans un délai spécifique. L'attribut "min" et "max" peut être utilisé pour cela:
<input type="date" min="2013-12-15" max="2013-12-30">
Dans les navigateurs qui supporte le type "date" seules les dates spécifié seront sélectionnable.

input type date-min-max

step:
Par ailleurs, si vous voulez limiter le choix à chaque cinq journée par exemple on peut utiliser l'attribut "step"
<input type="date" step="5">
input type date-step
d'autres options:
En plus, HTML5 offre également des choix alternatifs:
<input type="datetime">
<input type="date">
<input type="month">
<input type="week">
<input type="time">


color:

<input type="color">
les navigateurs prennent en charge des différents couleur.

input type color


url:

Le type "url" permet de s'assurer que le text saisi par l'utilisateur est un url valide.
<input type="url">

input type url


tel:

Leur avantage actuel est de présenter la forme d'un numéro de téléphone. Dans les navigateurs mobiles qui supportent ce nouveau type, permet d'afficher correctement un pavé numérique lors de la mise en place du clavier.
<input type="tel">
Si vous voulez valider un numéro de téléphone, vous aurez la possibilitée d'utiliser l'attribut pattern. Par exemple, imaginons que j'ai besoin un numéro de téléphone au format (0000-000-000):
<input type="tel" pattern="\d{4}-?\d{3}-?\d{3}">
Cela permettra d'assurer que la forme ne soumettra si la valeur fournie prend la forme d'0000-000-000 ou 0000000000.


search:

type "search"; à première vue, ne fait pas beaucoup plus que créer une input avec des coins arrondis.
<input type="search">
Peut-être une icône de recherche s'affichera sur le côté gauche de l'input, aussi permet au navigateur de se souvenir vos requêtes de recherche précédents.
<input type="search" results="3">

* la version google chrome utiliser est 31.

Formulaires HTML5: required-autofocus-pattern-maxlength-placeholder

required:

Nous pouvons spécifier qu'une "input" exige une valeur sans utiliser du javascript - au moins dans les navigateurs qui prennent en charge l'attribut required.
<input type="text" required>
Si on clique sur le bouton d'envoi d'une formulaire, et aucun valeur n'a pas été saisi, une bulle contextuel s'affiche, indique au utilisateur de saisir une valeur.

required


autofocus:

Une autre tâche de JavaScript que nous avons invoquée est l'autofocus pour placer le focus dans une input spécifique. Avec jQuery:
$('#input').focus();
HTML5 nous offre maintenant l'attribut "autofocus", ce qui enlève nos besoin du JavaScript.
<input type="text" autofocus>


pattern:

Si le navigateur va effectuer une validation, nous avons besoin de contrôler simplement si une valeur est saisi ou non. C'est là que l'attribut "pattern" entre en scène. Nous pouvons utiliser des expressions régulières pour spécifier le format que nous exigeons.
Imaginons que je dois indiquer à l'utilisateur de créer un nom d'utilisateur, compris entre sinq et dix caractères.
<form>
  <input type="text" required pattern="\w{5,10}">
  <input type="submit">
</form>

pattern

maxlength:

HTML5 introduit l'attribut "maxlength", ce qui nous permet de limiter le nombre de caractères qui peuvent être saisis.
Pour reprendre l'exemple précédent, si nous devons limiter le nombre de caractères à dix (sans utiliser l'attribut "pattern"):
<input type="text" required maxlength="10">


placeholder:

http://webeur.blogspot.com/2013/12/placeholder-html5.html

Placeholder HTML5

Parfois, il est très utile d'indiquer aux utilisateurs ce qu'ils doivent saisir. Traditionnellement, JavaScript doit être utilisé pour obtenir cet effet. Ci-dessous un exemple utilisons HTML et JQuery:

HTML:
<input type="text" id="email-input" value="Enter votre email" />

JQuery:
var emailInput = $('#email-input'),
emailDefault = emailInput.val();
emailInput.on({
  focus: function() {
    var $this = $(this);
    if($this.val() == 'Enter votre email') $this.val('');
  },

  blur: function() {
    var $this = $(this);
    if($this.val() == '') $this.val(emailDefault);
  }
});
Lorsque l'utilisateur clique sur l'entrée, la valeur disparut immédiatement, et lorsqu'il clique en sortie la valeur de défaut s'affiche à nouveau.
C'est très long n'est ce pas :). Avec HTML5, nous pouvons utiliser l'attribut "placeholder" pour réaliser cet effet exact :

HTML5:
<input type="text" id="email-input" placeholder="Enter votre email">
Placeholder html5