• Keine Ergebnisse gefunden

Neue Javascript Funktionen in HTML5

Medien Consulting & Services

3. Neue Javascript Funktionen in HTML5

Genau wie bei CSS3 sind die neuen APIs in einzelne Module aufgeteilt. Zu den wichtigsten neuen Modulen gehören folgende:

Web Storage

Daten direkt im Browser speichern http://www.w3.org/TR/webstorage/

Indexed Database API

Speichern umfangreicherer Daten im Browser http://www.w3.org/TR/IndexedDB/

Geolocation API

Ermöglicht das Abrufen von Geodaten aus dem Gerät oder Browser http://www.w3.org/TR/geolocation-API/

Drag & Drop

http://www.w3.org/TR/html5/dnd.html

File API – Directories and System / Writers Dateien und Verzeichnisse lesen

http://www.w3.org/TR/FileAPI/

http://www.w3.org/TR/file-writer-api/

http://www.w3.org/TR/file-system-api/

Web Notifications

Erlaubt die Darstellung einfacher Benachrichtigungen http://www.w3.org/TR/notifications/

Web Workers

Hintergrundaufgaben für Webanwendungen im Browser ausführen http://www.w3.org/TR/workers/

WebSocket API

Zweiwege-Kommunikation mit einem Remote Host via Sockets http://www.w3.org/TR/workers/

DeviceOrientation Event

Ermöglicht die Erfassung physikalischer Richtungs und Beschleunigungsinformationen eines Gerätes

http://www.w3.org/TR/orientation-event/

Den Status der verschiedenen JavaScript APIs findet man unter http://www.w3.org/standards/

techs/js#w3c_all

Sven Brencher

Medien Consulting & Services

52 / 56

3.1. Web Storage

Mit Web Storage kann man Daten im Browser speichern, die zu einem späteren Zeitpunkt innerhalb einer Session oder auch nach beenden des Browsers wieder abgerufen werden können.

3.1.1. localStorage Objekte

Der localStorage bleibt bestehen und wird nicht gelöscht, wenn der Anwender den Browser bzw. das Tab schließt. Ein solches localStorage Objekt ist sehr einfach erstellt und wieder ausgelesen:

<script>

localStorage.nachname="Brencher";

document.write(localStorage.nachname);

</script>

Eine Funktion, die speichert, wie oft der Besucher bereits die Seite aufgerufen hat würde folgendermaßen aussehen.

<script>

if (localStorage.besuchszaehler) { localStorage.besuchszaehler=Number(

localStorage.besuchszaehler) +1;

document.write("Vielen Dank f&uuml;r Ihren " + localStorage.besuchszaehler+".ten Besuch.");

} else

{ localStorage.besuchszaehler=1;

document.write("Herzlich willkommen!");

}</script>

3.1.2. sessionStorage Objekte

Die Handhabung der sessionStorage Objekte ist identisch mit dem localStorage Objekt. Allerdings ist dieses Objekt gelöscht, wenn der Anwender den Browser oder das Tab schließt.

<script>

sessionStorage.nachname="Brencher";

document.write(sessionStorage.nachname);

</script>

Sven Brencher

Medien Consulting & Services

53 / 56

3.1.3. Web Storage verwalten

Mit den Methoden getItem('key') setItem('key', 'value'), removeItem('key') und clear() können Web Storage Objekte verwaltet werden. Generell wird Web Storage einer Domäne zugeordnet. Verschiedene Webdokumente können innerhalb der Domäne auf die gleichen Objekte zugreifen.

Mit dieser Schaltfläche lässt sich das Web Storage Objekt löschen:

<input id="clearBtn" type="button" value="clear"

onclick="localStorage.clear();

window.location.reload();">

Über die Eigenschaften length lässt sich die Anzahl der Elemente auslesen.

Die Methode key(i:int) gibt einen String zurück, der den Namen des Elementes enthält (nicht den Wert).

sessionStorage.setItem('email', 'info@inlite.de');

sessionStorage.length; // gibt in diesem Fall 1 zurück sessionStorage.key(0); // gibt 'email' zurück

sessionStorage.getItem('email'); // info@inlite.de sessionStorage.removeItem('email'); // Element löschen sessionStorage.clear(); // löscht alle Einträge

3.1.4. Web Storage Ereignisse

Bei einer Änderung des localStorage Objektes über eine der oben genannten Methoden werden in anderen Tabs oder Browserfenstern Ereignisse ausgegeben. Darüber lassen sich die Werte synchronisieren oder der alte und neue Wert vergleichen.

<button onclick="localStorage.setItem('Zugriff', Number(localStorage.Zugriff)+1)">Change</button>

<button onclick="localStorage.clear()">Clear</button>

<script>

localStorage.setItem('Zugriff', '1');

var storageHandler = function (storageEvent) { alert('Die Eigenschaft '

+ storageEvent.key

+ ' wurde aktualisiert. Statt ' + storageEvent.oldValue

+ ' ist der neue Wert jetzt: ' + storageEvent.newValue);

}; window.addEventListener('storage', storageHandler);

</script>

LocalStorage und SessionStorage Keys und Values können im Chrome Browser über Darstellung > Entwickler > Entwickler-Tools > Resources eingesehen werden.

Die Dokumente müssen zum Testen der Ereignisse auf einem Webserver liegen. Lokal wird das Ereignis nicht ausgegeben!

Sven Brencher

Medien Consulting & Services

54 / 56

3.2. Geolocation

Mit der Geolocation API lassen sich die Ortsangaben zu einem Gerät darstellen. In Verbindung mit einer Google Map lassen sich so Ortsbestimmungen auf einer Karte darstellen. Diese Funktion ist besonders in mobilen Browsern sehr interessant.

<!DOCTYPE html>

<html>

<head>

<meta name="viewport" content="initial-scale=1.0, user-scalable=no">

var geoCall = function(position) { var latLong = new google.maps.LatLng(

position.coords.latitude, position.coords.longitude);

var optionen = { center: latLong,

zoom: 12,

mapTypeId: google.maps.MapTypeId.ROADMAP };

var karte = new google.maps.Map(

document.getElementById("kartenCanvas"), optionen

);

var marker = new google.maps.Marker({

position: latLong,

<div id="kartenCanvas" style="width:100%;

height:100%"></div>

<script>

if (navigator.geolocation) { var nav = navigator.geolocation.

watchPosition(geoCall);

} </script> Mehr Infos dazu unter http://code.google.com/apis/

maps/documentation/javascript/

tutorial.html

Die coords Eigenschaft enthält folgende Werte: lässt sich der Zeitpunkt der Abfrage bestimmen.

geolocation.getCurrentPosition() ruft die Daten nur ein einziges mal ab.

Sven Brencher

Medien Consulting & Services

55 / 56

3.3. Drag & Drop

Bilder und Texte im Browser per Drag und Drop bewegen oder Inhalte vom Desktop auf die Webseite ziehen. Der umgekehrte Weg um Inhalte vom Browser auf den Desktop zu ziehen wird momentan nur von Google Chrome unterstützt.

Erlauben, dass ein Element gezogen werden darf:

<img src="icon.png" draggable="true">

3.3.1. Drag und Drop im Browser

Bei einem Drag und Drop treten folgende Ereignisse auf, die einzeln abgerufen werden können:

dragstart

drag

dragenter

dragleave

dragover

drop

dragend

Für die Drag und Drop Aktion wird ein dataTransfer Objekt erstellt. Dieses beinhaltet das zu ziehende Element und die Daten. Es wird beim dragstart Ereignis erstellt und wird beim drop Ereignis wieder ausgelesen.

Während des Ziehens, kann statt der abgedimmten Browserversion mit der Methode setDragImage() auch ein Icon dargestellt werden. Die Methode setDate(format, data) legt fest von welchem Typ das gezogene Element ist und welche Daten es enthält.

Die dropEffect Eigenschaft gibt an ob der Browser eine passende

Visualisierung für eine Bewegung (move), einen Kopiervorgang (copy) oder eine Verknüpfung (link) darstellt. Die Eigenschaft effectAllowed definiert den Typ des Drag und Drop Vorganges. Zur Verfügung stehen copy, copyLink, copyMove, link, linkMove, all und uninitialized.

<script>

var dragIcon = document.createElement('img');

dragIcon.src = 'dragIcon.png';

document.addEventListener('dragstart', function(e) { e.dataTransfer.setData('text/plain', 'Hallo');

e.dataTransfer.setDragImage(dragIcon, -10, -10);

e.dataTransfer.dropEffect='copy';

e.dataTransfer.effectAllowed = 'copy';

}, false);

</script>

Sven Brencher

Medien Consulting & Services

56 / 56

3.3.2. Das Drop Ereignis

Wenn das Objekt wieder losgelassen wird, dann wird ein dragend Ereignis losgelassen. Soll ein anderes Element das Objekt entgegennehmen, dann muss dieses Element auf das drop Ereignis warten. Damit ein drop Ereignis ausgelöst werden kann, müssen die dragenter und dragover Ergebnisse gecancelt werden. Ansonsten verhindern diese das drop Ereignis.

Das folgende Beispiel könnte eine Warenkorbunktion sein, bei der man Produktbilder in einen Warenkorb ziehen kann.

<img src="icon.png" draggable="true"

ondragstart="dragStartHandler(event)">

<div id="dropTarget"

ondragenter="cancel(event)"

ondragover="cancel(event)"

ondrop="dropHandler(event)"></div>

<script>

function cancel(event) { event.preventDefault();

}function dragStartHandler(event) {

var data = event.dataTransfer.setData('text/plain', event.target.src);

event.dataTransfer.dropEffect='copy';

event.dataTransfer.effectAllowed = 'copy';

}function dropHandler(event) {

var data = event.dataTransfer.getData('text/plain');

var image = document.createElement('img');

image.setAttribute('src', data) event.target.appendChild(image) }</script>