Interaktivita SVG + JavaScript Cvičení 3 Z8144 Počítačová grafika v kartografii Jaro 2021 Filip Leitner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Minimum 60% bodov Filip Leitner Interaktivita SVG + JavaScript Počítačová grafika 2 / 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ”Use strict” Zbavuje JavaScript niektorých nástrah - upozorní na chyby Disallows global variables. (Catches missing var declarations and typos in variable names) Silent failing assignments will throw error in strict mode (assigning NaN = 5;) Attempts to delete undeletable properties will throw (delete Object.prototype) Requires all property names in an object literal to be unique (var x = x1: ”1”, x1: ”2”) Function parameter names must be unique (function sum (x, x) ...) Forbids octal syntax (var x = 023; some devs assume wrongly that a preceding zero does nothing to change the number.) Forbids the with keyword Forbids deleting plain names (delete x;) Filip Leitner Interaktivita SVG + JavaScript Počítačová grafika 3 / 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ”Postrehy” Obecnejší kód ... cx:${randomPosition(x, y)}; const randomPosition = (min, max) => { return Math.random() * (max - min) + min; }; function randomMove(x){ x.style.cx=Math.random() * 580 - 60; x.style.cy=Math.random() * 580 - 60 ; }; Filip Leitner Interaktivita SVG + JavaScript Počítačová grafika 4 / 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ”Postrehy” Zamedzenie duplicity const circ1 = document.getElementById("circle1"); const circ2 = document.getElementById("circle2"); circ1.addEventListener("click", moveit); circ2.addEventListener("click", moveit); document.querySelectorAll('circle').forEach(circle => { circle.addEventListener('click',moveIt) }) Komentujte kód Filip Leitner Interaktivita SVG + JavaScript Počítačová grafika 5 / 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Základní tvary rectangle rect obdélník/čtverec circle circle kruh ellipse ellipse elipsa line line úsečka polygon polygon polyline polyline lomená čára path path trasa text text Filip Leitner Interaktivita SVG + JavaScript Počítačová grafika 6 / 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Trasa Path Velká písmena – absolutní pozice malá písmena – relativní pozice moveto M(x y) (posun do bodu x y) closepath Z (uzavření trasy) lineto L(x y) (vykreslí čáru do bodu x y) horizontal lineto H(x) (horizontální čára až do) vertical lineto V(y) (svislá čára) curveto C(x1 y1 x2 y2 x y) smooth curveto S(x2 y2 x y) quadratic Bézier curve Q(x1 y1 x y) smooth quadratic Bézier curveto T(x y) elliptical Arc A(…) (eliptická výšeč/úseč) http://www.w3.org/TR/SVG/paths.html Filip Leitner Interaktivita SVG + JavaScript Počítačová grafika 7 / 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Trasa – příklad 1 Filip Leitner Interaktivita SVG + JavaScript Počítačová grafika 8 / 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Trasa – příklad 2 Filip Leitner Interaktivita SVG + JavaScript Počítačová grafika 9 / 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Trasa – příklad 3 Filip Leitner Interaktivita SVG + JavaScript Počítačová grafika 10 / 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . JavaScript – základní eventy (události) HTML atribut název eventu akce onclick click kliknutí myší onmousedown mousedown stisknutí tlačítka myši onmouseup mouseup uvolnění tlačítka myši onmouseover mouseover najetí myší na prvek onmouseout mouseout odjetí myší z prvku onkeydown keydown stisk klávesy onkeyup keyup konec stisku klávesy Rozdíly mezi eventy click, mousedown, mouseup viz https://stackoverflow.com/a/14805233. Filip Leitner Interaktivita SVG + JavaScript Počítačová grafika 11 / 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . onclick