Eieruhr
Ein Küchenwecker für den Browser: Zeit einstellen, laufen lassen, und am Ende ertönt ein Signal — ganz ohne Tondatei.
Drei Minuten für das weiche Ei, zehn für den Tee, fünfundzwanzig für eine Arbeitseinheit: Ein Kurzzeitwecker ist eines der nützlichsten kleinen Werkzeuge überhaupt. Dieser läuft im Browser, braucht keine Installation und keine Erlaubnis für irgendetwas.
Stellt Minuten und Sekunden ein oder nehmt einen der Schnellknöpfe. Während der Wecker läuft, seht ihr die Restzeit groß und den Fortschritt als Ring. Am Ende ertönt ein dreifacher Signalton, und die Anzeige blinkt — falls ihr in einem anderen Reiter seid, ändert sich zusätzlich der Titel im Browser-Reiter, sodass ihr es aus dem Augenwinkel bemerkt.
Der Ton wird vom Browser selbst erzeugt und stammt nicht aus einer Tondatei. Das hat zwei Vorteile: Es muss nichts nachgeladen werden, und der Ton lässt sich in Tonhöhe und Länge frei einstellen. Ein technischer Vorbehalt: Browser lassen Töne erst zu, nachdem der Besucher die Seite angeklickt hat — was hier von selbst geschieht, weil der Wecker ja per Knopf gestartet wird.
Verwandtes im Archiv: Stoppuhr misst vorwärts statt rückwärts, Sekundencountdown ist die schlichtere Variante, und das Metronom nebenan benutzt dieselbe Tonerzeugung im Takt.
Der Ton wird im Browser erzeugt. Lasst den Reiter offen — im Hintergrund kann der Takt ungenau werden.
So funktioniert das Script
Zwei Dinge machen aus einem Countdown einen brauchbaren Wecker: eine Zeitmessung, die nicht nachgeht, und ein Ton, der ohne Tondatei auskommt.
endzeit = Date.now() + rest * 1000;
…
rest = Math.max(0, Math.round((endzeit - Date.now()) / 1000));
Hier steckt der wichtigste Gedanke. Der naheliegende Weg wäre, alle tausend Millisekunden eine Sekunde abzuziehen. Das geht schief: Intervalle sind nie exakt, und sobald der Reiter in den Hintergrund rückt, bremsen Browser sie auf einen Aufruf pro Sekunde oder seltener — ein Wecker, der so zählt, geht nach Minuten deutlich nach.
Deshalb wird beim Start der Zeitpunkt des Endes festgehalten, und bei jedem Tick wird der Abstand dorthin neu ausgerechnet. Ob dazwischen zehn Ticks ausgefallen sind, spielt keine Rolle — die Anzeige springt dann eben, aber die Zeit stimmt. Dasselbe Prinzip wie bei der Stoppuhr, nur andersherum.
const schwinger = tonkanal.createOscillator();
schwinger.type = "sine";
schwinger.frequency.value = hertz;
Der Ton entsteht aus einem Schwingungserzeuger — genau wie in einem Synthesizer. sine ist die reine Sinusschwingung und klingt weich; square gäbe einen scharfen Piepton wie bei alten Geräten, sawtooth einen schnarrenden. 880 Hertz sind das a der zweigestrichenen Oktave, ein Ton, der sich gut durchsetzt, ohne zu stechen.
regler.gain.setValueAtTime(0, start);
regler.gain.linearRampToValueAtTime(0.3, start + 0.02);
regler.gain.linearRampToValueAtTime(0, start + dauer);
Der Regler steuert die Lautstärke über die Zeit. Diese drei Zeilen bewirken ein sanftes Ein- und Ausblenden über 20 Millisekunden. Ohne sie beginnt und endet die Schwingung abrupt mitten im Ausschlag, und man hört ein deutliches Knacken — der häufigste Fehler bei selbstgebauten Tönen. Die 0,3 statt 1,0 als Höchstwert hält die Lautstärke im erträglichen Bereich.
if (tonkanal === null) {
const Kanal = window.AudioContext || window.webkitAudioContext;
if (!Kanal) return;
tonkanal = new Kanal();
}
Der Tonkanal wird erst beim ersten Klick angelegt. Das ist keine Sparmaßnahme, sondern nötig: Browser verweigern die Tonausgabe, solange der Besucher die Seite nicht angeklickt hat — eine Regel gegen ungefragt lärmende Werbung. Weil der Wecker ohnehin per Knopf startet, fällt die Einschränkung hier nicht auf.
tonGeben(880, 0.25, 0);
tonGeben(880, 0.25, 0.4);
tonGeben(1320, 0.5, 0.8);
Das Signal besteht aus drei Tönen, deren Startzeitpunkte im Voraus festgelegt werden — der dritte beginnt 0,8 Sekunden nach dem ersten und liegt eine Quinte höher. Diese Planung im Voraus ist der große Vorteil der Tonschnittstelle: Sie arbeitet mit einer eigenen, sehr genauen Uhr, und die Töne kommen auch dann pünktlich, wenn das Script gerade mit anderem beschäftigt ist.
document.title = laeuft ? alsZeit(rest) + " – " + urspruenglicherTitel : …;
Der Reitertitel wird zur Zweitanzeige. Wer währenddessen in einem anderen Reiter arbeitet, sieht die Restzeit trotzdem — ein kleiner Kunstgriff, den viele Web-Wecker benutzen und der nichts kostet.
Zum Anpassen: Für einen anderen Klang ändert ihr Tonhöhe, Dauer und Wellenform in tonGeben. Wollt ihr eine Benachrichtigung auch bei geschlossenem Reiter, führt der Weg über die Benachrichtigungs-Schnittstelle des Browsers — die verlangt allerdings eine ausdrückliche Erlaubnis des Besuchers.
Script für die eigene Homepage
Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.
Mehr aus der Kategorie Verschiedenes
-
Auf Seite suchen
-
Benzinverbrauch
-
BMI berechnen
-
Browserinformationen
-
Caps Lock Text korrigieren
-
Cookietest
-
CPU-Test
-
Erdbeben
-
Farbverlauf
-
Gruppen einteilen
-
Handyrechner
-
IBAN prüfen
-
ISBN-Prüfziffer
-
Javascript Shell
-
Kontrast prüfen
-
Losentscheid
-
Lottozahlen Generator
-
Mauskoordinaten
-
Mehrwertsteuer-Rechner
-
Metronom
-
Notenrechner
-
Passwortgenerator
-
Periodensystem
-
Popup-Generator
-
RGB-Slider
-
Seitenverhältnis-Rechner
-
Tabellengenerator
-
Tastencodes anzeigen
-
To Do List