Spielereien mit der Mausposition
Das hier ist eine Entwicklung für einen Optiker und liegt seit längerem auf Eis. Also landet es hier!
Wofür das gut sein soll, ist, so hoffe ich, selbstredend.
Ablenkend vom Inhalt einer Präsentation ist es nur bei Mausbewegungen. Für meine Einstellung was sein darf und was nicht, steht dies im Konsens zum Thema und soll in erster Linie Spaß machen, zum Lesen anregen und sich freuen, dass die Augenverfolgung zur Ruhe geht, wenn der Seitenbesucher etwas findet, was ihn inne hält für 30 Sekunden. Das belohnt auch die Augenanimation mit Schließen. Es gibt ja nichts zu verfolgen.
Für diese Demo wird angezeigt, dass der Schlafmodusrückwärtszähler (ist das ein geiles Wort) bei jeder Mausbewegung sich wieder auf die Zählzeit von 30 Sekunden Wartezeit zurückstellt. Das wird im Original natürlich nicht angezeigt, wozu auch. Mit Mausbewegung wachen die Augen wieder auf und alles kann wieder von vorn beginnen.
Dezent läuft ab und an noch eine angebliche Reflektion über den rechten Brillenrand. Das muss einfach sein.
Warum? Weil ich das von Anfang an so wollte und viel Mühe darauf angewendet habe, dass sowas auch umgesetzt werden kann. Ab und an muss auch der Bauch gepinselt werden. Sowas ist man sich einfach schuldig.
Noch etwas zur Browsekompatilität:
Ob MSIE oder Edge: das Auge rechts will seinen Verlaufszentrum nicht anpassen. Das nimmt erst nach dem Schlafmodus die letzte ihm übergebene Position an und bleibt dann wieder auf dieser Position. Wird dem Auge links dies nicht per Script nachgereicht, klappt das auch auf dem Auge rechts. Was soll man dazu kommentieren.
MSIE: Reflexionssternchen streubt sich, auf den rechten Pfad zu gelangen. Was solls! Es bleibt in der linken oberen Ecke der SVG-Zeichenfläche hängen.
Chrome und Opera: Befindet sich der Cursor im Browserfenster, werden nach 60 Sekunden die Augen geöffnet, auch ohne Bewegung. Der Cursor außerhalb des Fensters funkt nicht dazwischen, klar. Ich habe keine Erklärung! Selbst wenn ich den Straßenverkehr und daraus resultierenden Erschütterungen einkalkuliere, geht das nicht mit exakter Wiederholung zusammen. (Okt. 2016)
Was stelle ich hier nach mehr als einem Jahr fest: „Nun ist alles so, wie es sein soll!“. Jetzt stellt sich mir aber die Frage: „Ist das jetzt ein Entwicklerteam für Chrome und Opera?“ Beide Browser können etwas nicht, wie automatische Worttrennung, oder sind identisch fortschrittlich in der Implementierung von HTML5- und CSS3-Technologien. Hmm!
SVG Inhalt:
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
<section id="svgbox" >
|
polygon id='stern' wird durch animateMotion und 4 Loops zu einer unterbrochenen Darstellung gezwungen. Ein ununterbrochener Fluss bringt keine Überraschung, selbst wenn diese vorhersehbar ist. Es ist aber nur eine Hilfskrücke. An einer auf kurvenpfad basierenden JavaScript-Animation bin ich gescheitert.
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
<polygon id="stern" fill="url(#stern-grad)" transform="translate(-8,-28) scale(.6)"
|
CSS3 für die Animation des Auf- und Abblendens des Sternchens auf dem Brillenrand:
24 25 26 27 28 29 30 |
#stern{ animation: stOpac 10s infinite }
|
externes JavaScript: Elemente erfassen und Variablen initialisieren
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
var _svgNS = 'http://www.w3.org/2000/svg'; |
Maskierung in den Maßen des Auges
function AUGE_MASKE() bewirkt öffnen und schließen und wird jeweils für jedes Auge von WAKEUP(mstep) und SLEEP(mstep) aufgerufen.
Der Funktionsaufruf SLEEP(0) Zeile:224 innerhalb der Funktion SEC() erfolgt nach Rückwärtszählen der Wartezeit.
Der Funktionsaufruf WAKEUP() wird zu Beginn Zeile:255 und wenn die Bedingung erfüllt ist, dass sich die Augen geschlossen haben Zeile:234, ausgeführt.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
function AUGE_MASKE(s,d,z,form){ |
Die Rückgabefunktion EYEMOVE() - Aufruf aus Zeile: 209 und 210 berechnet auf Grund der Mausposition die Korrektur der Pupillenstellung und wird in Zeile: 236 bis 239 mit setAttribute ausgeführt.
RADIALGRADIENTL() RADIALGRADIENTR()- Aufruf aus Zeile: 212 und 212 beeinflussen das Verlaufszentrum für jedes Auge.
LINSE() - Aufruf aus Zeile: 214 Die Pupillen sind als Ellipsen definiert. Werden diese zum Augenrand bewegt, erfährt der x-Radius seine Veränderung. Er wird verkleinert. Beide Radien zu verändern, führt bei z.B 45° wieder zur Kreisdarstellung. Je näher eine Pupille sich dem Rand nähert, soll eine Ellipse einen 3D-Effekt simulieren. Die Ellipse wird also rotiert. Jeweils für den ermittelten Winkel also linkes Auge alpha (Lalph) analog (Ralph). Dem Rotationszentrum wird die aktuelle Position des Auges übergeben. Die gegenteilige Rotation der Pupillenmaske ist wichtig, da in verschiedenen Positionen die Pupillen abgeschnitten werden. Dies geschieht mit clipPathL und clipPathR durch negative Winkelangabe.
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
function EYEMOVE(mxnull,lxnull,diffx,diffy,kor){ |
Die Rückgabefunktion AKTPOS(event) aktualisiert überdies auch die globalen Variablen für andere Funktionen.
Die Berechnungen der Variablen abshypL, Lkor, abshypR, Rkor dient der Korrektur wie sich die Pupillen auf Entfernung des Cursors einstellen sollen. In Nähe können die Augen schielen, bei Entfernung wird eine Weitsicht simuliert.
187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
function AKTPOS(event){ |
Das eigentliche Auslösen des Mausevents POSITION(event) Zeile: 228 bis 248
Von hier werde alle anderen Funktionen ausgelöst.
Für Chrome und Opera musste ich für mich eine Kontrollfunktion CHROPAEVENT() Zeile:233 einrichten, da diese beiden Browser ohne zutun ein Aufwachen auslösen, für das ich keine Erklärung finde.
218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 |
function SEC() { |