FlashReader
Reader, der eine Textdatei Wort für Wort in einem von Ihnen eingestellten Tempo zeigt und sich merkt, wo Sie aufgehört haben.
- Veröffentlicht
- Erhobene Daten
- Keine
- Preis
- Kostenlos
Über mich
FlashReader öffnet eine lokale .txt-Datei und zeigt sie Wort für Wort in der Bildschirmmitte an, standardmäßig alle 500 ms. Der Leser stellt Intervall, Buchstabengröße, Buchstabenfarbe und Hintergrundfarbe ein. Der gesamte Text und die Wortposition bleiben auf dem Gerät, sodass dieselbe Datei nach einem Neustart beim selben Wort wieder öffnet.
Diese Seite beschreibt die Webversion auf flashreader.fun: eine HTML-Seite mit Inline-JavaScript. Das Skript stellt keine Netzwerkanfragen und hat keine Analyse. Die Android-App bei Google Play ist ein separater Build, dessen Quellcode hier nicht behandelt wird.
Die Ingenieursarbeit ist klein und konkret: ein Timer, der das Tempo ändern kann, ohne das Wort zu verlieren, ein Speicher, der einen Neustart übersteht, und Einstellungen, die im Moment der Änderung angewendet und gespeichert werden.
FlashReader · konzentriertes Lesen
was gelöst wurde
Wortschleife
im ProduktWas es bringtDer Nutzer wählt eine Textdatei und liest sie Wort für Wort in gleichmäßigem Tempo und kann die Geschwindigkeit mitten im Text ändern, ohne seine Stelle zu verlieren.
- Problem
- Wörter müssen in einem gleichmäßigen, vom Nutzer gewählten Intervall wechseln, und das Intervall muss sich mitten im Text ändern lassen, ohne das aktuelle Wort zu verlieren.
- Lösung
Ein Intervall-Timer bewegt einen Index durch ein Wort-Array. Eine Tempoänderung stoppt diesen Timer und startet einen neuen vom selben Index aus.
- Stack
Eine ausgewählte Textdatei in eine Wortfolge verwandelnDie Datei mit FileReader als UTF-8 lesen und an Leerzeichen in ein Array aufteilen
Die Datei kommt aus einem Standard-Dateifeld, das auf .txt beschränkt ist, die Seite braucht also keinen Dateisystemzugriff. action_load_file() liest sie mit readAsText(file, 'UTF-8') und teilt das Ergebnis an einzelnen Leerzeichen auf; Satzzeichen bleiben am Wort. Der Rohtext wird außerdem für die nächste Sitzung an saveFileContent() übergeben.
Pro Tick ein Wort zeigen und nie zwei Timer gleichzeitig laufen lassenread() beendet sich, wenn schon ein Timer läuft; jeder Tick zeigt ein Wort und speichert den nächsten Index
read() weigert sich ohne geladenen Text zu starten ('Load text file to read!') und kehrt vorzeitig zurück, wenn is_going gesetzt ist, sodass zweimaliges Drücken von Play kein zweites Intervall starten kann. Jeder Tick schreibt text[position] in #text-zone und speichert position + 1. togglePlayPause() wechselt zwischen read() und pause() und aktualisiert die Play-Schaltfläche.
Eine Tempoänderung mitten im Lesen muss sofort wirkenDas Intervall stoppen und mit der neuen Periode neu starten, dabei den Wortindex behalten
setInterval kann seine Periode nicht ändern. updateReadingSpeed() und der Change-Handler des Geschwindigkeitsfelds rufen pause() und dann read() auf, wenn gerade gelesen wird. Der Index liegt im Reader-Objekt, sodass der neu gestartete Timer mit dem nächsten Wort weitermacht. Ein eingegebener Wert unter 1 wird auf den Standard von 500 ms zurückgesetzt.
Textende: sauber stoppen oder von vorn beginnenAm Ende entweder mit 'THE END!' stoppen und auf Wort 0 zurücksetzen oder zu Wort 0 umbrechen
Der Tick prüft auf ein undefiniertes Wort am aktuellen Index. Bei ausgeschaltetem Loop löscht er den Timer, zeigt 'THE END!', speichert die Position 0 und schaltet die Play-Schaltfläche zurück. Bei eingeschaltetem Loop setzt er den Index auf 0 und macht weiter. Die Loop-Wahl wird wie die anderen Einstellungen gespeichert.
Fortsetzen nach Neustart
im ProduktWas es bringtApp schließen und später wiederkommen: Derselbe Text öffnet beim selben Wort, mit derselben Buchstabengröße und Geschwindigkeit, alles auf dem Gerät gespeichert.
- Problem
- Der gesamte Text, die Wortposition und die Anzeigeeinstellungen müssen das Schließen der Seite oder der App überstehen, ohne Server.
- Lösung
Der Text geht in IndexedDB, die Position und die Einstellungen in localStorage, und beides wird beim Start zurückgelesen.
- Stack
Ein ganzes Buch gehört nicht in localStorageDen Rohtext in IndexedDB unter einem festen Schlüssel speichern; kleine Werte in localStorage belassen
saveFileContent() legt den Text im Store 'files' der Datenbank 'flashreader' (Version 2) mit der ID 'flashreader_last_text' ab, sodass eine neue Datei die alte ersetzt. onupgradeneeded erzeugt den Store nur, wenn er fehlt, sodass das Öffnen über einer älteren Version nicht fehlschlägt.
Position, Farben, Größe, Geschwindigkeit, Loop und der Dateiname bleiben in localStorage, wo Lesezugriffe beim Start synchron erfolgen.
Die letzte Datei bei dem Wort wieder öffnen, an dem das Lesen endeteDen Index bei jedem gezeigten Wort speichern; beim Start Text und Index neu laden
set_position() schreibt den Index bei jedem Tick in localStorage (fr_position), sodass eine geschlossene oder beendete App höchstens ein Wort verliert. Der Konstruktor liest zuerst den Index; bei DOMContentLoaded lädt getFileContent() den Text aus IndexedDB, teilt ihn erneut auf und zeigt 'The last file, <name>, has been loaded' mit der Aufforderung, Play zu drücken.
Gespeicherte Werte können fehlen oder defekt seinJeden Wert einzeln mit Fallbacks wiederherstellen: Position 0, Größe 48 px, Geschwindigkeit 500 ms
Jeder Schlüssel wird separat gelesen und angewendet, sodass ein fehlerhafter Wert die übrigen nicht blockiert. Eine nicht numerische Position wird zu 0, eine Schriftgröße, die zu 0 geparst wird, fällt auf 48 px zurück, eine Geschwindigkeit, die zu 0 geparst wird, auf 500 ms. Farben werden ohne '#' gespeichert und mit '#' wiederhergestellt und dann auf den Text und den Seitenhintergrund angewendet.
Anzeige und Steuerung
im ProduktWas es bringtBuchstabengröße und Farben ändern sich während des Lesens, Tastenkürzel steuern die Wiedergabe im Browser, und der Leser kann zehn Wörter zurückspringen oder zu jedem beliebigen Wort wechseln.
- Problem
- Buchstabengröße und Farben müssen sich während des Lesens ändern lassen, und im Desktop-Browser soll sich die Wiedergabe per Tastatur steuern lassen.
- Lösung
Felder der Werkzeugleiste wenden jede Änderung sofort an und speichern sie; im Browser rufen Tastenkürzel dieselben Reader-Methoden auf.
- Stack
Buchstabengröße und Farben müssen sofort wirken und erhalten bleibenChange-Handler setzen den Stil direkt und speichern den Wert; eine Größe unter 8 px wird zu 8
Der Handler für die Schriftfarbe setzt die Textfarbe von #text-zone, der Hintergrund-Handler den Hintergrund des body, und der Größen-Handler setzt font-size in px mit einer Untergrenze von 8. Jeder Handler schreibt seinen Wert im selben Schritt in localStorage, es gibt also keine separate Speicheraktion.
Im Browser darf die Tastatursteuerung die Seite beim Lesen nicht scrollenLeertaste, F, Auf und Ab rufen Reader-Aktionen auf und unterdrücken den Browser-Standard
In der Browserversion schaltet die Leertaste zwischen Play und Pause um, F schaltet den Vollbildmodus um, Auf macht die Wörter um 10 ms schneller mit einer Untergrenze von 50 ms, Ab um 10 ms langsamer. preventDefault() verhindert, dass der Browser scrollt oder ein fokussiertes Steuerelement betätigt. Geschwindigkeitsänderungen laufen über updateReadingSpeed(), sodass ein laufender Timer im neuen Tempo neu startet.
Der Leser hat ein paar Wörter verpasst und will zurückgehenDie Pfeiltaste nach links (Browser) geht 10 Wörter zurück, bei 0 begrenzt; das Positionsfeld springt zu jedem beliebigen Wort
skipBackwards() verschiebt den Index um 10 zurück, nie unter 0, zeigt dieses Wort sofort an und speichert die Position. Das Positionsfeld in der Werkzeugleiste akzeptiert jede Wortnummer; negative Werte werden zu 0.
Vollbild funktioniert in Browsern und App-Hüllen unterschiedlichStandard- und präfixierte Fullscreen-APIs versuchen, dann ein Cordova-Fullscreen-Plugin, falls die Seite eines findet
enterFullscreen() und exitFullscreen() gehen die Varianten standard, moz, webkit und ms durch. Existiert ein globales Fullscreen-Objekt, wie bei einem Cordova-Vollbild-Plugin, wird auch Fullscreen.show() aufgerufen. Die Schaltfläche und die Taste F teilen sich dieselbe Prüfung aller vier fullscreenElement-Varianten.
Zahlen
aus dem Produkt- Standardtempo 500 ms pro Wort 120 Wörter pro Minute.
- Schnellstes Tempo 50 ms pro Wort Bis zu 1.200 Wörter pro Minute per Tastatur.
- Geschwindigkeitsschritt 10 ms Pfeiltasten Auf und Ab.