1 of 39

Webtechnologien II

Programmieren mit JavaScript:

Grundlagen und Beispiele

Prof. Dr. Raphael Roßmann

MKD, WS 22/23

Stand: 18.10.2022

2 of 39

„Hallo Welt!“ in JavaScript

2

<!DOCTYPE html>

<html>

<head>

<title>Hallo Welt</title>

<meta charset="UTF-8">

</head>

<body>

<script>

var ausgabe="Hallo Welt!";

alert(ausgabe);

</script>

</body>

</html>

Inline-Script, platziert vor

dem schließenden <body>

REPEAT!

3 of 39

„Hallo Welt!“ in JavaScript

3

<script>

var ausgabe="Hallo Welt!";

alert(ausgabe);

</script>

Eine Variable mit Namen

ausgabe wird definiert

Variable wird initialisiert:

Textinhalt wird zugewiesen

Semikolon beendet

Befehl/Zeile

Befehl/Funktion alert()

öffnet ein Warnfenster

Als Text des Fensters wird der

Inhalt der Variable übergeben

REPEAT!

4 of 39

Kernbestandteile von JavaScript: Funktionen

4

Das “Hallo Welt!“-Beispiel enthält bereits drei zentrale Bestandteile von jeder Programmiersprache: Funktionen, Operatoren und Variablen

FUNKTIONEN (“Befehle“)

  • Vordefinierte (z.B. alert und prompt) oder selbst definierte und benannte Funktionen führen im Programm benötigte Berechnungen oder Reaktionen aus
  • Man übergibt in runden Klammern bestimmte Werte an eine Funktion, so genannte “Übergabeparameter”: z.B.: alert("Hallo"); //Übergabe eines Textinhaltes

REPEAT!

5 of 39

Kernbestandteile von JavaScript: Operatoren

5

OPERATOREN�Sie weisen Werte zu, verändern Werte durch mathematische Operationen und vergleichen Werte miteinander

  • Der Zuweisungsoperator = weist einer Variable (s.u.) einen Wert zu
  • Mathematische Operatoren dienen der Berechnung: +, -, *, /
  • Logische Vergleichsoperatoren vergleichen Werte miteinander: <, >, <=, == ("ist gleich"), != ("ungleich")
  • Logische Verknüpfungsoperatoren verknüpfen Vergleiche miteinander: && ("und"), || ("oder")

REPEAT!

6 of 39

Kernbestandteile von JavaScript: Variablen

6

VARIABLEN

  • Dies sind benannte Speicherbereiche, in denen man Werte (Zahlen oder Texte) ablegen kann und später wieder abrufen
  • Es gibt Textvariablen (“Zeichenketten“/“Strings“) und numerische Variablen (Ganzzahlen (“Integer“), Fließkommazahlen (“Float“))
  • Mit dem Befehl “var“ gefolgt von einem selbst gewählten Namen werden Variablen definiert (im Speicher des Browsers angelegt)
  • Indem ein numerischer Wert oder Text durch ein “=“ zugewiesen wird, wird die Variable initialisiert
  • “DynamicTyping“: JavaScript versucht den Typ der Variable selbst zu erschließen und wenn nötig anzupassen

REPEAT!

7 of 39

Kernbestandteile von JavaScript: Kontrollstrukturen

7

KONTROLLSTRUKTUREN

Sie beeinflussen den ansonsten linearen Ablauf eines Programms und reagieren auf logische Bedingungen

  • Bedingte Anweisungen („Wenn-Dann-Bedingungen“):�Sie ermöglichen Verzweigungen eines Programms in Abhängigkeit von logischen Bedingungen (s.o.)�z.B. if-Anweisung, (switch-Anweisung)
  • Schleifen: �Bestimmte Bestandteile eines Programms werden in Abhängigkeit von logischen Bedingungen wiederholt�z.B. while-Schleife, (for-Schleife)

REPEAT!

8 of 39

Beispiel: Eingabe, Kombination und Ausgabe

8

<body>

<script>

var vorname=prompt("Bitte gib deinen Vornamen ein!");

//Der Befehl prompt() fordert zur Eingabe eines Textes� //in einem Warnfenster auf

var ausgabe="Hallo "+vorname+", wie geht’s?";

//Textvariablen können mit dem Operator + kombiniert

//werden; prompt() erzeugt eine Textvariable (vorname)

alert(ausgabe); //Inhalt der Variable im Warnfenster � //per Befehl alert() ausgeben

</script>

</body>

REPEAT!

9 of 39

Beispiel: Eingabe, Berechnung und Ausgabe

9

<body>

<script>

var anzahl=prompt("Wie viele Kugeln willst du?");

var kugelpreis=1.2; //Dezimaltrennzeichen ist der Punkt!

//(nicht das Komma)

var betrag=anzahl*kugelpreis;

//"*" ist "mal"; Grundrechenarten: + - * /

//Wegen der Multiplikation wandelt JavaScript anzahl

//automatisch in eine numerische Variable um!

var ausgabe="Das Eis kostet: "+betrag+" Euro";

//Numerische Var. betrag wird autom. in Text umgewandelt

alert(ausgabe);

</script>

</body>

REPEAT!

10 of 39

Aufgabe: Eingabe, Berechnung und Ausgabe

10

Erweitert

Lösung

REPEAT!

11 of 39

Kontrollstrukturen: if-Anweisung

11

Durch eine if-Anweisung reagiert ein Programm auf logische Bedingungen:

<script>

var auswahl=prompt("Star Wars(1) oder Star Trek(2)?");

if (auswahl=="1") {

alert("Die Macht ist mit dir!“);

} else if (auswahl=="2") {

alert("Energie!");

} else {

alert("Langweilig!");

}

</script>

Logische Bedingung: wahr oder falsch

Wird ausgeführt, wenn Bedingung„wahr“

Achtung!: Doppeltes == prüft Gleichheit

Alle anderen Bedingung

REPEAT!

12 of 39

Kontrollstrukturen: if-Anweisung

12

Prüfung von weiteren Bedingungen per logischem Vergleich und logischer Verknüpfung:

<script>

var zahl=20;

if (zahl!=10) {

alert("Zahl ist ungleich 10!");

}

if (zahl>=19) {

alert("Zahl ist größer/gleich 19");

}

if (zahl>10 && zahl<20) {

alert("Zahl ist größer 10 UND kleiner 20");

}

//Prüfung von ODER mit: zahl>10 || zahl<20

</script>

Vergleich: “WAHR“

Vergleich: “WAHR“

Vergleich und Verknüpfung: “FALSCH“

REPEAT!

13 of 39

Beispiele/Übungen zu logischen Operatoren

13

<body>

<script>

var geschlecht="weiblich";

var alter=20;

if (geschlecht=="weiblich") { /* "ist gleich" -> wahr! (true) */ }

if (geschlecht!="weiblich") { /* "ist ungleich" -> falsch! (false) */

}

if (geschlecht=="weiblich" && alter<=20) { � /* "ist gleich UND kleiner gleich" -> wahr! (true) */ }

if (geschlecht=="weiblich" || alter>20) {

/* "ist gleich ODER größer" -> wahr! (true) */ }

if (geschlecht=="weiblich" && (alter>20 || alter<=10)) {

/* falsch! (false) */ }

</script>

</body>

Vergleiche (<,>,==) und Verknüpfungen (UND, ODER)

REPEAT!

14 of 39

Eigene Funktionen definieren und aufrufen

14

  • Oftmals werden bestimmte Teile eines Programmes (z.B. bestimmte Berechnungen) immer wieder benötigt.
  • Um diese Teile nicht ständig wiederholen zu müssen und benötigte Funktionalitäten “abzukapseln”, kann man eigene Funktionen verwenden.
  • Der Code innerhalb einer Funktion wird erst ausgeführt, wenn die Funktion aufgerufen wird!

Hier ein einfaches Beispiel:

<script>

function verdoppeln(eingabe) {

var ausgabe="Das Ergebnis: "+eingabe*2;

return ausgabe;

}

alert(verdoppeln(5));

</script>

15 of 39

Eigene Funktionen definieren und aufrufen

15

<script>

function verdoppeln(eingabe) {

var ausgabe="Das Ergebnis: "+eingabe*2;

return ausgabe;

}

alert(verdoppeln(5));

</script>

“function” legt eigene Funktion an

Eigener Name für die Funktion

ein/mehrere Übergabeparameter (optional!)

“return” gibt das Ergebnis zurück (optional)

Aufruf der Funktion mit Übergabeparameter “5”:

Dieser Aufruf wird durch den Rückgabewert ersetzt

Try it!

16 of 39

Interaktion von HTML, CSS und JavaScript

16

Wie kann man per JavaScript Interaktion des Nutzers mit der Website (z.B. Klick/Touch auf einen Button) feststellen und darauf reagieren?

> "Events"/"onclick"-Abfrage oder "Eventlistener"

Wie kann man die Elemente/Inhalte auf einer Website per JavaScript gezielt ansprechen?

> "Selektion" per JavaScript

Wie kann man die Eigenschaften (Text, Aussehen, Position ect.) dieser Elemente per JavaScript verändern?

> "DOM-Manipulation" über CSS-Attribute oder HTML-Inhalte

17 of 39

Interaktion von HTML und JS: Selektion von Elementen

17

Im HTML-Markup steht: <div id="einIDName"></div>

  • Selektieren dieses Elements (Tags) per ID in der HTML-Struktur �(auch DOM genannt): �document.getElementById("einIDName");
  • Alternative Art der Selektion: Es wird das erste gefundene Element ausgewählt, das über den angegebenen CSS-Selektor (z.B. "#meineid" oder ".meineklasse" gefunden wird�document.querySelector("ein CSS-Selektor");
  • Die Selektion an sich bewirkt nichts, sie ist aber die Voraussetzung dafür, dass man auf eine Element der Website (des DOM) zugreifen und es verändern kann (siehe folgende Folien)

18 of 39

Interaktion von HTML und JavaScript: Events

18

HTML-Elemente mit Interaktionen versehen, indem auf Ereignisse (“Events”) reagiert wird:

<button id="startbutton">Klick mich!</button>

<script>

document.getElementById("startbutton").onclick=

function(){

alert("Button geklickt!");

}

</script>

Der Button mit der id "Startbutton" wird erst selektiert mit dem Befehl "getElementById". Bei Klick auf den Button ("onclick") wird die Funktion ausgeführt: per alert-Befehl wird ein Warnfenster geöffnet.

Try it!

Code

19 of 39

Interaktion von HTML und JavaScript: Events

19

Neben dem (für Apps wichtigen) Event onclick gibt es noch einige weitere:

ondblclick, onmouseover, onmouseleave, onfocus, onkeydown (Überblick)

Beispiel:

<button id="startbutton">React!</button>

<script>

document.getElementById("startbutton").onmouseover=

function(){

alert("Button mit Mouse berührt!");

}

</script>

Try it!

20 of 39

Interaktion von HTML und JavaScript: Eventlistener

20

HTML-Elemente mit Interaktionen versehen, indem Ereignisse (“Events”) per Eventlistener registriert werden (eine Alternative zu "onclick")

  • Das Element wird selektiert (s.o.) und mit einem “EventListener” versehen
  • Es gibt unterschiedliche Events: z.B. click, doubleclick, mouseover, focus, keydown etc.
  • Wird der Event, auf den “gehorcht” wird, festgestellt/registriert, dann wird eine angegebene Funktion ausgeführt/aufgerufendocument.getElementById("buttonid").addEventListener(�"click", tuwas);
  • "tuwas" wäre die Funktion, die wir selbst schreiben müssen: �function tuwas() { … }

21 of 39

Beispiel: Button mit EventListener

21

<body>

<button id="startbutton">Klick mich!</button>

<script>

function tuwas() {

alert("Button geklickt!");

}

document.getElementById("startbutton").

addEventListener("click", tuwas);

</script>

</body>

Try it!

22 of 39

Interaktion von HTML und JS: Veränderung von Elementen/Inhalt

22

  • Hat man mit einer der gezeigten Methoden ein HTML-Element selektiert, so kann man einen Inhalt (Text oder HTML) per JavaScript in das Element einfügen:�document.getElementById("einIDName").innerHTML="Hallo";�Erzeugt dieses HTML: <div id="einIDName">Hallo</div>
  • Mit der gleichen Methoden kann man auch den aktuellen Inhalt (Text/HTML) dieses HTML-Elements abfragen:�var inhalt = �document.getElementById("einIDName").innerHTML; �(Die Variable inhalt erhält den Wert "Hallo")

23 of 39

Interaktion von HTML und JavaScript: Klassen und Stile

23

Selektierten HTML-Elementen kann man auch CSS-Eigenschaften hinzufügen:

  • Einen Inline-Style hinzufügen oder ändern:�document.getElementById("element").setAttribute�("style", "color:red");�Ergebnis: <h1 id="element" style="color:red">Test</h1>
  • Eine CSS-Klasse hinzufügen:�document.getElementById("element").setAttribute�("class", "red");�Ergebnis: <h1 id="element" class="red">Test</h1>

24 of 39

Beispiel: Interaktion von HTML und JavaScript

24

<body>

<h1 id="ausgabe">Inhalt</h1>

<script>

//Element per ID selektieren und Text reinschreiben

document.getElementById("ausgabe").innerHTML=� "Nachricht von JavaScript";

//Element per ID selektieren und Inline-Style hinzufügen

document.getElementById("ausgabe").setAttribute("style", "color:red");� //Element per ID selektieren und Klasse "aktiv" hinzufügen

document.getElementById("ausgabe").setAttribute("class", "aktiv");

</script>

</body>

Try it!

25 of 39

Datum/Uhrzeit abfragen

25

  • Das JavaScript-Datumsobjekt enthält diverse Informationen zu Datum, Uhrzeit, Wochentag etc.
  • Zunächst muss eine “Instanz” dieses Datumsobjekts erstellt und in einer Variable gespeichert werden:var datum=new Date();
  • Nun kann über die neue Instanz des Datumsobjektes (hier: “datum”) auf die diversen Eigenschaften zugegriffen werden
  • Hierfür gibt es eigene Funktionen, die per Punktsyntax auf die Instanz angewendet werden:�Uhrzeit: getHours(), getMinutes(), getSeconds() ...�Datum: getDate(), getMonth(), getFullYear()

var datum=new Date();�var stunden=datum.getHours();

26 of 39

Beispiel: Zeitanzeige per alert

26

<body>

<script>

//Datumsobjekt erzeugen und in Variable uhrzeit schreiben

var uhrzeit=new Date();

//Stunden, Minuten und Sekunden aus dem Datum "extrahieren"

var stunden=uhrzeit.getHours();

var minuten=uhrzeit.getMinutes();

var sekunden=uhrzeit.getSeconds();

alert("Aktuelle Uhrzeit: "+stunden+":"+minuten+":"+sekunden);

</script>

</body>

Try it!

27 of 39

Beispiel: Interaktion von HTML und JavaScript: Uhrzeit

27

<body>

<h1 id="uhranzeige">Hallo</h1>

<script>

//Uhrzeit holen

var uhrzeit=new Date();

//Datumsobjekt erzeugen und in Variable uhrzeit schreiben

var stunden=uhrzeit.getHours(); //Stunden aus dem Datum "extrahieren"

var minuten=uhrzeit.getMinutes();

var sekunden=uhrzeit.getSeconds();

document.getElementById("uhranzeige").innerHTML=� stunden+":"+minuten+":"+sekunden;

</script>

</body>

Try it!

28 of 39

Eigene Funktion wiederholt aufrufen (zeitgesteuert)

28

  • In bestimmten Anwendungsfällen muss eine Funktion nicht nur einmal aufgerufen werden, sondern in einem vorgegebenen Zeitintervall immer wieder
  • Hierfür gibt es in JavaScript die Funktion setInterval(function, milliseconds)
  • setInterval hat zwei Parameter: “function” steht für den Namen der aufzurufenden Funktion und “milliseconds” gibt das Intervall/die Verzögerung an, mit dem die Funktion aufgerufen wird

<script>

function zufallspopup() {

alert(Math.round(Math.random()*100));

}

setInterval(zufallspopup, 2000);

//Popup mit Zufallszahl zwischen 0 und 100 alle 2 Sekunden

</script>

Try it!

29 of 39

Beispiel erweitert: Die Uhr laufen lassen

29

<body>

<h1 id="uhranzeige">Hallo</h1>

<script>

function zeigezeit() { //eigene Funktion definieren

var uhrzeit=new Date();

var stunden=uhrzeit.getHours();

var minuten=uhrzeit.getMinutes();

var sekunden=uhrzeit.getSeconds();

document.getElementById("uhranzeige").innerHTML=� stunden+":"+minuten+":"+sekunden;

}

setInterval(zeigezeit, 1000); //jede Sekunde Funktion aufrufen

</script>

</body>

30 of 39

Beispiel: Button fügt Inline-Style mit Farbe Rot hinzu

30

<body>

<h1 id="headline">Mein Text</h1>

<button id="stylebutton">Klick mich!</button>

<script>

function addstyle() {

document.getElementById("headline").

setAttribute("style","color:red");

}

document.getElementById("stylebutton").

addEventListener("click", addstyle);

</script>

</body>

Try it!

31 of 39

Beispiel: Steuerung mit einem Button und Hilfsvariable

31

<h1 id="textfeld"></h1>

<button id="taste">Hallo</button>

<script>

var hilfsvariable="moin"; //1 Hilfsvariable definieren und initialisieren

function servus() {

if(hilfsvariable=="moin") { //2 Hilfsvariable prüfen

document.getElementById("textfeld").innerHTML="Servus";

hilfsvariable="servus"; //3 Hilfsvariable verändern

} else {

document.getElementById("textfeld").innerHTML="Moin Moin";

hilfsvariable="moin"; //4 Hilfsvariable verändern

}

}

document.getElementById("taste").addEventListener("click", servus);

</script>

Try it!

mit Audio

32 of 39

Sounds/Audio abspielen

32

  • Neben dem HTML-Tag <audio> lässt sich Sound auch direkt per JavaScript wiedergeben
  • Hierfür gibt es das Audio-Objekt:var coolsound=new Audio("meinsound.mp3");
  • Auf dieses Objekt können wieder Funktionen per Dotsyntax angewendet werden:�play(), pause()

Beispiel:

<script>

var coolsound=� new Audio("https://onlinepromo.biz/mkd/gutenmorgen.mp3");

coolsound.play();

</script>

33 of 39

Nutzereingaben: input-Feld

33

  • Will man Eingaben des Nutzers (z.B. Freitext) auf der Website ermöglichen (auf schönere Weise als mit dem Befehl prompt), dann kann man die Formularfelder von HTML benutzen.
  • Für die Abfrage per JavaScript muss man kein komplettes Formular per <form>-Tag erstellen, es genügt ein einzelnes <input>-Element.
  • Einzeilige Freitext-Felder werden mit <input type="text"> realisiert:<input id="eingabe" type="text" placeholder="Gib was ein!">;
  • Um an den eigegebenen Wert zu kommen, selektiert man das Element per ID und greift den Text mit der Eigenschaft "value" ab:�var eingabe=document.getElementById("eingabe").value;

Beispiel

34 of 39

Zufallszahlen generieren

34

Vor allem für Spiele ist es oftmals notwendig, Verhaltensweisen nicht immer nach dem gleichen Schema ablaufen zu lassen. Sie sind ja dann fordernder und spannender, wenn sie “unberechenbar” sind. Für die richtige “Prise Chaos” werden oftmals Zufallszahlen eingesetzt.

Auch in JavaScript gibt es hierfür eine Funktion: Math.random()

alert(Math.random());

Dies gibt einen krummen Wert zwischen 0 (einschließlich) und 1 (ausschließlich) aus.

Multipliziert man nun Math.random() mit einer Zahl und rundet auf per Math.ceil(), so erhält man zufällige Werte zwischen 1 und dieser Zahl:

alert(Math.ceil(Math.random()*10)); //Zahl von 1 bis 10

35 of 39

Beispiel: Zufallszahlen - Würfel die Sechs!

35

Wir wollen ein Programm schreiben, das auf Knopfdruck per Zufall eine Zahl zwischen 1 und 6 ausgibt.

<h1 id="ausgabe"></h1>

<button id="wuerfelbtn">Würfeln!</button>

<script>

function wuerfeln () {

var zufallszahl = Math.random(); //zufällige Zahl zwischen 0 und <1

zufallszahl=zufallszahl*6; //mit der gewünschen oberen Schwelle (hier 6)

//multiplizieren, um höhere Werte zu erhalten

zufallszahl=Math.ceil(zufallszahl); //Aufrunden auf die ganze Stelle

document.getElementById("ausgabe").innerHTML=zufallszahl; //Ausgabe

}

document.getElementById("wuerfelbtn").addEventListener("click", wuerfeln);

</script>

Testen auf Glitch

36 of 39

Arrays (Felder): Definition/Initialisierung

36

  • Ein Nachteil der bisher verwendeten Variablen besteht darin, dass in diesen jeweils nur ein Wert gespeichert werden kann.
  • Will man in einem Programm eine große Menge an Texten oder Zahlen speichern und wieder abrufen, sind Variablen dafür nicht optimal geeignet.
  • Für diese Aufgabe verwendet man in JavaScript und anderen Programmiersprachen Arrays (deutsch: Felder, Listen, Reihen...)
  • Definition und Initialisierung eines Arrays:var namen=["Anna","Berta","Carla","Doro"];
  • Arrays werden ähnlich wie Variablen angelegt, jedoch werden die einzelnen Werte per Komma getrennt und der Array wird mit eckigen Klammern umfasst.�

37 of 39

Arrays (Felder): Abfrage

37

var namen=["Anna","Berta","Carla","Doro"];

  • Will man den Inhalt des oben definierten Arrays wieder abfragen oder auslesen, geschieht dies über die Position der Werte innerhalb des Arrays.
  • Die in einem Array gespeicherten Werten werden indiziert beginnend ab der Indexposition 0 für den ersten Wert.�(Es wird also nicht der Wert 1 verwendet!)

alert(namen[0]); // Ausgabe von: "Anna"�alert(namen[3]); // Ausgabe von: "Doro"

  • namen.length ermittelt die Länge des Arrays (hier: 4)

alert(namen[namen.length-1]); /* Ausgabe des letzten Elementes im Array: "Doro" */

Beispiel

38 of 39

Objekte in Arrays speichern

38

Will man komplexere Daten strukturiert in einem Array speichern, so kann man mit Objekten arbeiten. Dadurch hat man fast eine Art Datenbank innerhalb von JavaScript zur Verfügung

var namen=[{ vorname: "Anna",� nachname: "Meier" },

{ vorname: "Berta",� nachname: "Müller }]; //Array mit zwei Objekten und zwei Eigenschaften

Abfrage der Inhalte:

alert(namen[0].vorname); // Ausgabe von: "Anna"�alert(namen[1].nachname); // Ausgabe von: "Müller"

39 of 39

Beispiel: Catch-a-ball-game

39

Wir setzen ein einfaches Spiel per HTML, CSS und JavaScript um:

Ein Ball fällt (an zufällig ausgewählten) Stellen des Browsers von oben nach unten. Der Spieler muss den Ball anklicken, bevor der Ball unten aus dem Browser verschwindet. Erwischt er den Ball bekommt er einen Punkt - wenn nicht, verliert er eines von fünf "Leben". Wenn alle "Leben" verbraucht sind, heißt es "Game Over".

Assets:

Bild eines Golfballs: http://onlinepromo.biz/mkd/golfball.png

Wiese als Hintergrund: http://onlinepromo.biz/mkd/grass.jpg

Sounds: blupp, kuckuck, ohno

Lösung auf Glitch