feat(mobile): Zurück-Geste schließt die Ansicht, zwei Finger zoomen das PDF
Zwei Dinge, die am Telefon fehlten – beide in der installierten App besonders schmerzhaft, weil es dort keine Adresszeile als Rückweg gibt. 1. Zurück schloss bisher die Anwendung, nicht die Vorschau. Vorschau, Office-Editor und die aufgeschobene Seitenleiste kamen im Verlauf des Browsers gar nicht vor: Der einzige Eintrag war die Dateiliste. Jetzt legt jede bildschirmfüllende Ansicht beim Öffnen einen leeren Eintrag an (die Adresse bleibt gleich – eine Vorschau ist kein Ort für ein Lesezeichen) und verbraucht ihn beim Schließen wieder, egal ob über die Geste, Escape oder den Knopf. Ein Stapel sorgt dafür, dass bei übereinanderliegenden Ansichten nur die oberste reagiert. Collabora blendet auf kleinen Schirmen seinen eigenen Schließen-Knopf aus (closeButtonEnabled && !isSmallScreenDevice) – ohne diesen Weg käme man aus einem Dokument am Telefon nur über die Kopfzeile heraus. 2. Die Zusammenziehgeste vergrößerte die ganze Seite statt des PDFs: Leiste und Knöpfe wuchsen mit, das Dokument blieb grob. touch-action nimmt dem Browser die Geste, ein eigener Zuhörer setzt unsere Zoomstufen an ihre Stelle, verankert an der Mitte zwischen den Fingern – dieselbe Regel wie bei Strg+Mausrad. Gemessen in Chromium mit Touch-Emulation, 412x900: Vorschau offen -> Verlauf 2->3, Zurück -> Vorschau zu, Anwendung bleibt Esc -> Eintrag wieder weg (ein weiteres Zurück verlässt die App) Aufziehen 65% -> 125%, Zuziehen -> 50%, visualViewport.scale bleibt 1 Ein Befund aus dieser Messung steckt im Code: Zuerst kam pro Geste nur eine Stufe, weil sich der Zuhörer bei jeder Zoomänderung neu anmeldete und der gemerkte Fingerabstand dabei verlorenging. Abstand und Maßstab liegen deshalb in Referenzen, der Zuhörer meldet sich einmal an. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
face318131
commit
574ba3e6c5
5 files changed
+207
-2
No files matched your search
@@ -3,6 +3,7 @@ import { filesApi } from '../api/client'
|
||||
import type { FolderItem, User } from '../api/client'
|
||||
import { useNavHistory, type View } from '../hooks/useNavHistory'
|
||||
import { useEdgeSwipe } from '../hooks/useEdgeSwipe'
|
||||
import { useBackClose } from '../hooks/useBackClose'
|
||||
import Sidebar from './Sidebar'
|
||||
import FileBrowser from '../pages/FileBrowser'
|
||||
import TrashPage from '../pages/TrashPage'
|
||||
@@ -34,6 +35,14 @@ export default function Shell({ user, onLogout, onUserChanged }: Props) {
|
||||
onOpen: useCallback(() => setSidebarOpen(true), []),
|
||||
onClose: useCallback(() => setSidebarOpen(false), []),
|
||||
})
|
||||
// Ist die Leiste am Telefon aufgeschoben, holt die Zurück-Geste sie
|
||||
// zurück – sie ist dann das Oberste auf dem Schirm, und genau darauf zielt
|
||||
// die Bewegung.
|
||||
useBackClose({
|
||||
active: sidebarOpen,
|
||||
onClose: useCallback(() => { setSidebarOpen(false) }, []),
|
||||
})
|
||||
|
||||
// Hochgezählt, wenn etwas auf den Papierkorb gezogen wurde – die Dateiliste
|
||||
// hängt daran und holt sich daraufhin neu.
|
||||
const [trashBump, setTrashBump] = useState(0)
|
||||
|
||||
Reference in new issue
Block a user