HTML5-Tutorium: Canvas: Hello World 02: Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Kowa (Diskussion | Beiträge)
Kowa (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(81 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{HTML5-Tutorium:Canvas:HelloWorld:Menü}}
{{HTML5-Tutorium:Canvas:HelloWorld:Menü}}
'''Ergebnis''': <code>[http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_02/WebContent/hello.html hello.html]</code>
'''Musterlösung''': [https://glossar.hs-augsburg.de/beispiel/tutorium/es5/hello_world_canvas/WK_HelloWorldCanvas02/web/index.html <code>index.html</code>]
([http://glossar.hs-augsburg.de/webdav/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_02 SVN-Repository])
([https://glossar.hs-augsburg.de/beispiel/tutorium/es5/hello_world_canvas/WK_HelloWorldCanvas02/ SVN-Repository])


=HTML5: Hello-&lt;name&gt;-Anwendung mit Canvas=
==Use Cases==
Die in [[HTML5-Tutorium: Canvas: Hello World 01|Teil 1]] erstellte Hello-World-Anwendung wird so erweitert,
dass der Benutzer seinen Namen eingeben kann und mit diesem
anschließend begrüßt wird. Außerdem wird das Canvas-Layout mit Hilfe von CSS modifiziert.


==Musterlösung herunterladen==
Wie im  [[HTML5-Tutorium: JavaScript: Hello World 03|dritten]] und 
(Dieser Punkt kann übersprungen werden.)
[[HTML5-Tutorium: JavaScript: Hello World 04|vierten Teil des '''Hello-World'''-Tutoriums]] soll die ganze der Name des Benutzers
erfragt werden, bevor er persönlich begrüßt wird.


Laden Sie die Musterlösunglösung <code>http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_02/</code>
Die Ausgabe erfolgt wie im  [[HTML5-Tutorium: Canvas: Hello World 01|ersten Teil des '''Canvas'''-Tutoriums]] mit Hilfe eines Canvas-Elements.
auf [[HTML5-Tutorium: Canvas: Hello World 01#Musterl.C3.B6sung_herunterladen|bekannte Weise]] in Eclipse.


==Neues Projekt anlegen==
Die Anwendung soll wie  „App5“ des [[HTML5-Tutorium: JavaScript: Hello World 04|vierten Teil]]s des Hello-World-Tutoriums
aufgebaut sein:


Legen Sie ein neues Projekt an:
* Die Initialisierungsinformationen werden aus JSON-Dateien eingelesen.
* Die Anwendung wird mit Hilfe von RequireJS modularisiert.


# <code>Datei</code> <code>Neu</code> <code>Statisches Web-Projekt</code>
==Erstellen eines neuen Projekts==
# Project name: <code>HelloWorldCanvas02</code> <code>Fertigstellen</code>
Erstellen Sie ein neues Projekt „<code>HelloWorldCanvas02</code>“.
# Im Menü am oberen Rand: Klick auf <code>Projekt</code> <code>Eigenschaften</code>  → Codierung der Textdatei: Klick auf <code>Sonstige</code> → <code>UTF-8</code> selektieren
Kopieren Sie anschließend Datei „<code>index5.html</code>“ sowie die Ordner
<code>web/css</code>“, „<code>web/init</code>“, „<code>web/js/app5</code>“ , „<code>web/js/lib/require</code>
und die Datei „<code>web/js/main5.js</code>  
aus dem [https://glossar.hs-augsburg.de/beispiel/tutorium/es5/hello_world/WK_HelloWorld04/ vierten Teil des Tutoriums]
zusammen mit den darin enthaltenen Dateien in Ihr Projekt.


Speichern Sie Ihr Projekt wiederum in Ihrem Repository:
Nehmen Sie folgende Umbenennungen vor (smartes [[Refactoring]]):


# <code>Projektexplorer</code>: Rechtsklick auf <code>HelloWorldCanvas02</code> → <code>Team</code> <code>Projekt gemeinsam nutzen</code>
* <code>index5.html</code> → <code>index.html</code>
# <code>SVN</code> → <code>Weiter</code>
* <code>js/main5.js</code> → <code>js/main.js</code>
# Url: <code> https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT</code> ('''<code>ACCOUNT</code> durch eigenen RZ-Account ersetzen''') → <code>Weiter</code>  
* <code>js/app5</code> → <code>js/app</code>
# Use specified folder name: <code>mmprog/tutorium/HelloWorldCanvas02</code> → <code>Fertigstellen</code>


==Projekt im Repository sichern==
Vergessen Sie nicht, dass Sie in der Datei „<code>index.html</code>“ den Befehl


Das neu angelegte Projekt wird als erstes im Repositotry gesichert:
<source lang="html5">
<script data-main="js/main5" src="js/lib/require/require.js"></script>
</source>
durch
<source lang="html5">
<script data-main="js/main" src="js/lib/require/require.js"></script>
</source>
ersetzen müssen. Und in der Konfigurationsanweisung von RequireJS ( Datei „<code>main.js</code>“)
müssen sie <code>app: 'app5'</code> entweder entfernen oder durch <code>app:  'app'</code> ersetzen.
Den Eintrag <code>wk:  'lib/wk_amd'</code> benötigen Sie auch nicht mehr (außer wenn Sie meine JSON-Bibliothek an Stelle der
des RequireJS-JSON-Plugins verwenden möchten).


# Im Projektexplorer: Rechtsklick auf <code>HelloWorldCanvas02</code> → <code>Team</code> → <code>Commit</code>
Passen Sie zu guter Letzt den Titel in der HTML-Datei „<code>index.html</code>“ an.
# Comment: <code>Neues Projekt angelegt.</code>
# <code>OK</code>


==Dateien erstellen==
Wenn Sie alles richtig gemacht haben, sollte jetzt der Code der ursprünglichen App5-Anwendung wieder laufen.


===<code>main.js</code>===
Jetzt müssen Sie nur noch wenige Veränderungen am Code vornehmen, um die Ausgabe auf eine Canvas-Ausgabe umzustellen.
Erstellen Sie im Ordner <code>WebContent/js</code> des Projektes die Datei <code>main.js</code>:


<source lang="javascript">
==<code>index.html</code>==
var v_canvas;
var v_context;


function init()
Ersetzen Sie Hello-Section-Elemente Ihrer HTML-Datei durch folgende Section-Element:
{
  v_canvas  = document.getElementById("d_canvas");
  v_context = v_canvas.getContext("2d");


  v_canvas.width  = 300;
<source lang="html5">
   v_canvas.height = 27;
<section id="section1_hello" class="hidden">
}
   <canvas id="canvas1">
 
    Unfortunately, your browser doesn't support HTML5!
function sayHello()
  </canvas>
{
</section>
  v_context.clearRect(0, 0, v_canvas.width, v_canvas.height); // clear canvas
</source>
  v_context.font = "bold 20px 'Times New Roman', Times, serif";
und
  v_context.fillText("Hello, " + document.d_form.d_name.value + "!", 5, 20);
<source lang="html5">
}
<section id="section2_hello" class="hidden">
  <canvas id="canvas2">
  </canvas>
</section>
</source>
</source>


===<code>main.css</code>===
Dieser Schritt war in ähnlicher Form schon im [[HTML5-Tutorium:_Canvas:_Hello_World_01|ersten Teil des Canvas-Tutoriums]] notwendig.  
Erstellen Sie im Ordner <code>WebContent/css</code> des Projektes die Datei <code>main.css</code>:


<source lang="css">
==<code>hello_de.json</code> und <code>hello_en.json</code>==
canvas
{
  border-color: #BBBBBB;
  border-width: 2px;
  border-style: solid;
}
</source>


===<code>hello.html</code>===
Die Initialisierungs-Dateien „<code>hello_de.json</code>“ und „<code>hello_en.json</code>“ müssen an die neuen Gegebenheiten angepasst werden.
Erstellen Sie im Ordner <code>WebContent</code> des Projektes die Datei <code>hello.html</code>:
Elemente, die es nicht mehr gibt – <code>"hello"</code> und <code>"welcome"</code> –, müssen entfernt werden,
neue Elemente  – <code>"canvas"</code> – müssen eingefügt werden und Initialwerte für da Canvas-Element
(Höhe, Breit, Fontangaben etc.) müssen ergänzt werden.


<source lang="html4strict">
Beispielsweise sieht die Datei „<code>hello_de.json</code>“ nun folgendermaßen aus:
<!DOCTYPE html>
<source lang="javascript">
<html>
{
   <head>
  "HTMLElements":
     <title>HTML5-Tutorium: Canvas: Hello World 02</title>
   {
    <meta charset="UTF-8">
     "sectionForm":   "section2_form",
     <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
     "headingForm":    "heading2_form",
     <link  rel="stylesheet"       href="css/main.css" />
     "inputNameLabel": "label2_name",
     <script type="text/javascript" src="js/main.js"    ></script>
     "inputName":      "input2_name",
  </head>
     "buttonReset":    "button2_reset",
  <body onload="init()">
     "buttonSubmit":   "button2_submit",
    <canvas id="d_canvas">
    "sectionHello""section2_hello",
      Your browser does not support canvas!
    "canvas":        "canvas2"
     </canvas>
   },
    <form name="d_form">
      <label>Your name:</label>
      <input name="d_name" type="text" value=""><br/>
      <input type="button" value="OK" onmousedown="sayHello()">
    </form>
   </body>
</html>
</source>


=Apache oder Tomcat als Test-Server=
  "text":
  {
    "title":  "Hello, Stranger!",
    "query":  "What's your name?",
    "reset":  "Reset",
    "submit":  "Say hello",
    "hello":  "Hello, $1!"
  },


Anstelle des Eclipse-eigenen Testserver kann man auch einen beliebigen
  "css":
anderen Server (wie z.B. [[Apache]] oder [[Tomcat]]) zum Testen einer Web-Anwendung verwenden.
  {
Der Vorteil dieser Variante ist, dass man den Zielserver gemäß seinen Bedürfnissen wählen und konfigurieren kann
    "hidden": "hidden"
und dass die Anwendung von Anfang an auf dem richtigen Server getestet wird.
  },


Voraussetzung ist, dass ein entsprechender Server lokal installiert wurde:
  "canvas":
* [[Installation von Apache (Windows)]], [[Installation von Apache (Mac OS X)]], [[Installation von Apache (Unix)]]
  {
* [[Installation von Tomcat (Windows)]], [[Installation von Tomcat (Mac OS X)]], [[Installation von Tomcat (Unix)]]
    "width":  500,
    "height": 60,
    "font":  "bold 40px \"Times New Roman\", Times, serif",
    "hello_x": 35,
    "hello_y": 43
  }
}
</source>
==<code>greet.js</code>==


Definieren eines neuen Test-Servers:
Zu guter Letzt muss noch die Methode „<code>sayHello</code>“ in der Datei „<code>greet.js</code>“ angepasst werden.
Diese Methode soll nicht mehr den DOM-Baum manipulieren, sondern den Gruß in das Ihr übermittelte Canvas-Element schreiben.
Alle übrigen Methoden werden nicht verändert.


# Projektexplorer: Rechtklick auf den Root-Ordner des aktuellen Projektes <code>HelloWorldCanvas02</code> <code>Eigenschaften</code> → <code>Server</code> → Standardserver: <code>keine</code> → <code>OK</code>
Die Methode  „<code>sayHello</code> funktioniert im Prinzip genauso wie die Initialisierungsfunktion
# Im Projektverzeichnis: <code>hello.html</code> selktieren → Klick auf Icon „grüner Kreis mit weißem Dreieck“ → <code>Neuen Server manuell definieren<code> selektieren → Severziel eingeben: <code>HTTP Server</code> selektieren → <code>Weiter</code>
im ersten Teil des Tutoriums. Nur werden jetzt keine konstanten Werte mehr zum Initialisieren des Canvas verwendet, 
# Hostname des Servers: <code>localhost</code>, Server name: HTTP Server (Apache) o.Ä, Serverlaufzeit: Klick auf <code>Hinzufügen</code> → Server name: HTTP Server (Apache) o.Ä., Publicshing Directory: <code>c:\web\apache\htdocs</code> (Webverzeichnis des Servers) → <code>Fertigstellen</code>  → <code>Weiter</code> → evtl. Anpassungen vornehmen → <code>Fertigstellen</code>
sondern Werte, die im Parameter „<code>p_init</code>“ übermittelt wurden:
<source lang="javascript">
l_this.sayHello =
  function ()
  {
    var l_init_elements = p_init.HTMLElements,
        l_init_text    = p_init.text,
        l_init_hidden  = p_init.css.hidden,
        l_init_canvas  = p_init.canvas,
        l_name          = p_document.getElementById(l_init_elements.inputName).value,
        l_canvas        = p_document.getElementById(l_init_elements.canvas),
        l_context      = l_canvas.getContext('2d');


=Quellen=
    l_canvas.width  = l_init_canvas.width;
<noinclude>
    l_canvas.height = l_init_canvas.height;
# {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}</noinclude>
    l_context.font  = l_init_canvas.font;
# [http://diveintohtml5.info/canvas.html Canvas–Dive Into HTML5]
# [http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_02/WebContent/ Musterlösung], [http://glossar.hs-augsburg.de/webdav/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_02/ Musterlösung (SVN)]


=Siehe auch=
    l_context.fillText(l_init_text.hello.replace('$1', l_name), l_init_canvas.hello_x, l_init_canvas.hello_y);


# [http://www.w3schools.com/html5/ w3schools.com: HTML5 Tutorial]
    p_document.getElementById(l_init_elements.sectionHello).classList.remove(l_init_hidden);
 
    p_document.getElementById(l_init_elements.sectionForm).classList.add(l_init_hidden);
<noinclude>[[Kategorie: HTML5-Tutorium: Canvas: Hello World]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]
  };
</noinclude>
</source>
==Quellen==
<references/>
<ol start ="2">
<li> {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}</li>
</ol>

Aktuelle Version vom 1. März 2023, 13:19 Uhr

Dieser Artikel erfüllt die GlossarWiki-Qualitätsanforderungen:

Korrektheit: 4
(großteils überprüft)
Umfang: 4
(unwichtige Fakten fehlen)
Quellenangaben: 5
(vollständig vorhanden)
Quellenarten: 5
(ausgezeichnet)
Konformität: 4
(sehr gut)

HTML-Tutorium Hello World: JavaScript | Canvas | SVG

Inhalt | Teil 1 | Teil 2

Musterlösung: index.html (SVN-Repository)

Use Cases

Wie im dritten und vierten Teil des Hello-World-Tutoriums soll die ganze der Name des Benutzers erfragt werden, bevor er persönlich begrüßt wird.

Die Ausgabe erfolgt wie im ersten Teil des Canvas-Tutoriums mit Hilfe eines Canvas-Elements.

Die Anwendung soll wie „App5“ des vierten Teils des Hello-World-Tutoriums aufgebaut sein:

  • Die Initialisierungsinformationen werden aus JSON-Dateien eingelesen.
  • Die Anwendung wird mit Hilfe von RequireJS modularisiert.

Erstellen eines neuen Projekts

Erstellen Sie ein neues Projekt „HelloWorldCanvas02“. Kopieren Sie anschließend Datei „index5.html“ sowie die Ordner „web/css“, „web/init“, „web/js/app5“ , „web/js/lib/require“ und die Datei „web/js/main5.js“ aus dem vierten Teil des Tutoriums zusammen mit den darin enthaltenen Dateien in Ihr Projekt.

Nehmen Sie folgende Umbenennungen vor (smartes Refactoring):

  • index5.htmlindex.html
  • js/main5.jsjs/main.js
  • js/app5js/app

Vergessen Sie nicht, dass Sie in der Datei „index.html“ den Befehl

<script data-main="js/main5" src="js/lib/require/require.js"></script>

durch

<script data-main="js/main" src="js/lib/require/require.js"></script>

ersetzen müssen. Und in der Konfigurationsanweisung von RequireJS ( Datei „main.js“) müssen sie app: 'app5' entweder entfernen oder durch app: 'app' ersetzen. Den Eintrag wk: 'lib/wk_amd' benötigen Sie auch nicht mehr (außer wenn Sie meine JSON-Bibliothek an Stelle der des RequireJS-JSON-Plugins verwenden möchten).

Passen Sie zu guter Letzt den Titel in der HTML-Datei „index.html“ an.

Wenn Sie alles richtig gemacht haben, sollte jetzt der Code der ursprünglichen App5-Anwendung wieder laufen.

Jetzt müssen Sie nur noch wenige Veränderungen am Code vornehmen, um die Ausgabe auf eine Canvas-Ausgabe umzustellen.

index.html

Ersetzen Sie Hello-Section-Elemente Ihrer HTML-Datei durch folgende Section-Element:

<section id="section1_hello" class="hidden">
  <canvas id="canvas1">
    Unfortunately, your browser doesn't support HTML5!
  </canvas>
</section>

und

<section id="section2_hello" class="hidden">
  <canvas id="canvas2">
  </canvas>
</section>

Dieser Schritt war in ähnlicher Form schon im ersten Teil des Canvas-Tutoriums notwendig.

hello_de.json und hello_en.json

Die Initialisierungs-Dateien „hello_de.json“ und „hello_en.json“ müssen an die neuen Gegebenheiten angepasst werden. Elemente, die es nicht mehr gibt – "hello" und "welcome" –, müssen entfernt werden, neue Elemente – "canvas" – müssen eingefügt werden und Initialwerte für da Canvas-Element (Höhe, Breit, Fontangaben etc.) müssen ergänzt werden.

Beispielsweise sieht die Datei „hello_de.json“ nun folgendermaßen aus:

{
  "HTMLElements":
  {
    "sectionForm":    "section2_form",
    "headingForm":    "heading2_form",
    "inputNameLabel": "label2_name",
    "inputName":      "input2_name",
    "buttonReset":    "button2_reset",
    "buttonSubmit":   "button2_submit",
    "sectionHello":   "section2_hello",
    "canvas":         "canvas2"
  },

  "text":
  {
    "title":   "Hello, Stranger!",
    "query":   "What's your name?",
    "reset":   "Reset",
    "submit":  "Say hello",
    "hello":   "Hello, $1!"
  },

  "css":
  {
    "hidden": "hidden"
  },

  "canvas":
  {
    "width":  500,
    "height":  60,
    "font":   "bold 40px \"Times New Roman\", Times, serif",
    "hello_x": 35,
    "hello_y": 43
  }
}

greet.js

Zu guter Letzt muss noch die Methode „sayHello“ in der Datei „greet.js“ angepasst werden. Diese Methode soll nicht mehr den DOM-Baum manipulieren, sondern den Gruß in das Ihr übermittelte Canvas-Element schreiben. Alle übrigen Methoden werden nicht verändert.

Die Methode „sayHello funktioniert im Prinzip genauso wie die Initialisierungsfunktion im ersten Teil des Tutoriums. Nur werden jetzt keine konstanten Werte mehr zum Initialisieren des Canvas verwendet, sondern Werte, die im Parameter „p_init“ übermittelt wurden:

l_this.sayHello =
  function ()
  {
    var l_init_elements = p_init.HTMLElements,
        l_init_text     = p_init.text,
        l_init_hidden   = p_init.css.hidden,
        l_init_canvas   = p_init.canvas,
        l_name          = p_document.getElementById(l_init_elements.inputName).value,
        l_canvas        = p_document.getElementById(l_init_elements.canvas),
        l_context       = l_canvas.getContext('2d');

    l_canvas.width  = l_init_canvas.width;
    l_canvas.height = l_init_canvas.height;
    l_context.font  = l_init_canvas.font;

    l_context.fillText(l_init_text.hello.replace('$1', l_name), l_init_canvas.hello_x, l_init_canvas.hello_y);

    p_document.getElementById(l_init_elements.sectionHello).classList.remove(l_init_hidden);
    p_document.getElementById(l_init_elements.sectionForm).classList.add(l_init_hidden);
  };

Quellen

  1. Kowarschick (MMProg): Wolfgang Kowarschick; Vorlesung „Multimedia-Programmierung“; Hochschule: Hochschule Augsburg; Adresse: Augsburg; Web-Link; 2018; Quellengüte: 3 (Vorlesung)