8. Elm - Eine funktionale Programmiersprache zur Entwicklung von Web-Apps
8.6 Graphik mit Svg erzeugen
Einfache Zeichnungen können Sie in elm erstellen, indem Sie innerhalb Ihres Html-Objekts ein Svg-Objekt erschaffen. Syntaktisch sind Svg-Objekte ähnlich zu Html-Objekten: sie brauchen eine Attributliste und eine Liste von Unterelementen. Sie müssen das Svg-Paket zuerst installieren.
elm install elm/svg
Schauen Sie sich Page07Svg.elm als "Minimalbeispiel" für Svg-Grafik in Elm an.
Übungsaufgabe Erweitern Sie Page07Svg.elm. Das Innere des Kreises soll sich die Farbe ändern, wenn Sie mit der Maus drüberfahren.
Hinweis. Verwenden Sie aus dem Modul Svg.Events
die
Funktionen onClick, onMouseOver, onMouseOut
.
Übungsaufgabe Erweitern Sie den Code, dass nun ein Gittermuster erscheint wie z.B. in diesem Screenshot:
Hinweis.List.map
und List.range
sind
Ihre Freunde.
Maus-Koordinaten
Um bei Maus-Events aussagekräftigere Daten wie zum Beispiel die Koordinaten herauszufinden, können Sie zum Beispiel folgendes Paket installieren und verwenden.
elm install mpizenberg/elm-pointer-events
Dokumentation finden Sie
hier.
Das Paket definiert Events wie
onMove : (Event -> msg) -> Attribute msg
,
die also als Argument eine Message mit Event-Payload erwarten.
Da der Paketname sehr lang ist, empfehle ich Ihnen, das Paket
oben in Ihrer Elm-Datei mit import Html.Events.Extra.Mouse as Mouse
zu
importieren.
Sie können dann zum Beispiel mit Mouse.onMove IhreMessage
den "Listener" einem
Objekt als Attribut anhängen.
Die Nachricht IhreMessage
braucht dann einen Mouse.Event
als
Paylaod.
Mit event.offsetPos
kommen Sie dann an die Koordinaten ran.
Übungsaufgabe Erweitern Sie Page07Svg.elm bzw. das Ergebnis Ihrer letzten Übung, sodass es MouseMove-Events verarbeiten kann. Zum Beispiel könnten Sie programmieren, dass dem Mauszeiger ein kleiner Kreis "anklebt", wenn Sie über die Svg-Viewbox fahren, wie hier.
Vorsicht. Sie müssen dann wieder "Pixelkoordinaten" in "Svg-Viewbox-Koordinaten" umrechnen, da unsere Viewbox ja "-1 -1 2 2" ist aber 600 Pixel breit und hoch. Die Mauskoordinaten werden immer in Pixeln angegeben (in diesem Falle relativ zur linken oberen Ecke der Svg-Viewbox, aber denoch in Pixeln).