feat(pdf): Zoomstufen von 10 % auf 5 % verfeinert
Marc las am Telefon Sprünge von acht Prozentpunkten – die Stufe ist relativ, nicht in Punkten: Bei 65 % sind zehn Prozent sieben Punkte, bei 200 % zwanzig. Fünf Prozent treffen das Gemeinte besser. Die Schwelle der Geste folgt der Stufenweite (vorher 8 % / 7 %), sonst ließe sich die feinere Weite mit den Fingern gar nicht treffen. Kein Ruckeln dadurch: Die Zeichenschleife bricht eine laufende Darstellung ab, sobald sich der Maßstab ändert – von zwanzig Stufen einer Geste wird nur die letzte fertig gemalt. Gemessen, dieselbe Geste: 65 → 68 → 71 → 75 → 79 → 83 → 87 → 91 → 96 → 101 → 106 → 111 → 117 → 123 → 129 % Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
9c5cda75d7
commit
ded1134f6a
1 file changed
+22
-11
@@ -44,18 +44,23 @@ const zoomSteps = [0.5, 0.75, 1, 1.25, 1.5, 2, 3]
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Stufenweite für **stufenloses** Zoomen: Finger und Mausrad gehen in
|
* Stufenweite für **stufenloses** Zoomen: Finger und Mausrad gehen in
|
||||||
* Zehnteln, nicht auf der Leiter der Knöpfe.
|
* Zwanzigsteln, nicht auf der Leiter der Knöpfe.
|
||||||
*
|
*
|
||||||
* Der Unterschied ist gewollt. Ein Klick soll etwas bewegen – von 100 auf
|
* Der Unterschied ist gewollt. Ein Klick soll etwas bewegen – von 100 auf
|
||||||
* 110 % zu springen wäre ein Knopf, den man fünfmal drückt. Eine Geste
|
* 105 % zu springen wäre ein Knopf, den man zehnmal drückt. Eine Geste
|
||||||
* dagegen ist ein Regler: Dort sind Viertelsprünge zu grob, man schießt über
|
* dagegen ist ein Regler: Dort sind Viertelsprünge zu grob, man schießt über
|
||||||
* die Größe hinaus, die man eigentlich wollte.
|
* die Größe hinaus, die man eigentlich wollte.
|
||||||
*
|
*
|
||||||
* Multiplikativ statt in festen Prozentpunkten, weil Zoomen relativ ist: Von
|
* Multiplikativ statt in festen Prozentpunkten, weil Zoomen relativ ist: Von
|
||||||
* 50 auf 60 % ist ein Fünftel mehr, von 300 auf 310 % ein Dreißigstel. Zehn
|
* 50 auf 55 % ist ein Zehntel mehr, von 300 auf 305 % ein Sechzigstel. Fünf
|
||||||
* Prozent *vom aktuellen Wert* fühlen sich überall gleich an.
|
* Prozent *vom aktuellen Wert* fühlen sich überall gleich an.
|
||||||
|
*
|
||||||
|
* **Achtung beim Ablesen:** Die angezeigte Zahl springt deshalb nicht um
|
||||||
|
* feste fünf Punkte. Bei 65 % sind fünf Prozent gut drei Punkte, bei 200 %
|
||||||
|
* sind es zehn. Erst 1,1 war zu grob (gemessen bei 65 % ein Sprung von sieben
|
||||||
|
* Punkten, kurz darauf von elf).
|
||||||
*/
|
*/
|
||||||
const zoomFactor = 1.1
|
const zoomFactor = 1.05
|
||||||
const minScale = 0.25
|
const minScale = 0.25
|
||||||
const maxScale = 4
|
const maxScale = 4
|
||||||
|
|
||||||
@@ -710,12 +715,15 @@ export default function PdfViewer({ url, fileId, searchTerm }: Props) {
|
|||||||
* einem Finger bleibt erlaubt), und dieser Zuhörer setzt an ihre Stelle
|
* einem Finger bleibt erlaubt), und dieser Zuhörer setzt an ihre Stelle
|
||||||
* unsere Stufen.
|
* unsere Stufen.
|
||||||
*
|
*
|
||||||
* **In Zehnteln, nicht stufenlos.** Jede Zwischengröße hieße, alle
|
* **In Zwanzigsteln, nicht stufenlos.** Der Zoom rastet auf fünf Prozent
|
||||||
* sichtbaren Seiten neu zu zeichnen – auf einem Telefon Dutzende Male
|
* des aktuellen Werts, sobald der Fingerabstand um ebenso viel gewachsen
|
||||||
* während einer einzigen Geste. Der Zoom rastet deshalb auf Zehntel des
|
* oder geschrumpft ist. Danach zählt der neue Abstand als Anfang, eine
|
||||||
* aktuellen Werts, sobald der Fingerabstand um acht Prozent gewachsen oder
|
* lange Geste geht also über viele Stufen weiter.
|
||||||
* um sieben geschrumpft ist. Danach zählt der neue Abstand als Anfang, eine
|
*
|
||||||
* lange Geste geht also über mehrere Stufen weiter.
|
* Dass daraus keine Ruckelei wird, liegt nicht an dieser Stelle: Die
|
||||||
|
* Zeichenschleife bricht eine laufende Darstellung ab, sobald sich der
|
||||||
|
* Maßstab ändert. Von zwanzig Stufen einer Geste wird also nur die letzte
|
||||||
|
* fertig gemalt.
|
||||||
*
|
*
|
||||||
* Die Leiter der Knöpfe (0,5 / 0,75 / 1 / …) wäre hier zu grob: Ein
|
* Die Leiter der Knöpfe (0,5 / 0,75 / 1 / …) wäre hier zu grob: Ein
|
||||||
* Viertelsprung schießt über die Größe hinaus, die man mit den Fingern
|
* Viertelsprung schießt über die Größe hinaus, die man mit den Fingern
|
||||||
@@ -742,7 +750,10 @@ export default function PdfViewer({ url, fileId, searchTerm }: Props) {
|
|||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
const now = distance(e.touches)
|
const now = distance(e.touches)
|
||||||
const ratio = now / base
|
const ratio = now / base
|
||||||
const dir: 1 | -1 | 0 = ratio > 1.08 ? 1 : ratio < 0.93 ? -1 : 0
|
// Die Schwelle folgt der Stufenweite: Wandern die Finger um eine
|
||||||
|
// Stufe auseinander, gibt es eine Stufe. Bliebe sie größer, ließe sich
|
||||||
|
// die feinere Weite gar nicht mehr treffen.
|
||||||
|
const dir: 1 | -1 | 0 = ratio > 1.04 ? 1 : ratio < 0.96 ? -1 : 0
|
||||||
if (!dir) return
|
if (!dir) return
|
||||||
pinchBase.current = now
|
pinchBase.current = now
|
||||||
const root2 = scrollRef.current
|
const root2 = scrollRef.current
|
||||||
|
|||||||
Reference in new issue
Block a user