Wichtig
Detail
Wichtig
Detail
Ist-Situation: Hält man beim Verschieben des Scroll-Balkens im Bibliotheksfenster die linke Maustaste gedrückt, ohne aber die Maus zu bewegen, verschiebt sich der Inhalt der Bibliothek in hoher Frequenz um wenige Millimeter nach rechts und links.
Nicht reproduzierbar:
- auf externen Bildschirmen
- in Firefox
Ursache
Eine Scroll-Operation in Frozen-Tables wird durch JS für alle relevanten Tabellenteile (Header, Body, Scrollbar) unter Nutzung von Event-Listenern durchgeführt. Wird auf auf einem der Tabellenteile eine Scroll-Operation detektiert, findet eine Synchronisierung der anderen Tabellenteile statt. Dabei findet zuvor eine Prüfung auf Änderung der Scroll-Position gegenüber der letzten Event-Verarbeitung statt. Diese Prüfung funktioniert jedoch nicht in chromium-basierten Browsern, da in diesen die Scroll-Position als Double-Wert zur Verfügung gestellt wird, der sich bei jedem Event minimal unterscheidet. Hinzu kommt bei der Umrechnung der Scroll-Position zwischen den verschiedenen Tabellenteilen (Scrollbar ist größer als der flexible Tabellenteil) eine Umrechnungs-, bzw. Rundungsunschärfe. Das führt dazu, dass jede Tabellenteilsynchronisierung wiederum auf den synchronisierte Teilen eine Event-Verarbeitung mit Tabellenteilsynchronisierung auslöst. Daher "zittert" die sichtbare Scroll-Position um einen Mittelwert.
Lösung
Vor der Synchronisation der Tabellenteile werden die entsprechenden Event-Listener deaktiviert und danach wieder aktiviert.
Test
- Wechsel zur Sicht "Tabellen" in TL-Demo
- Anpassung der Darstellung zur Anzeige aller Spalten
- Durchführung von Scroll-Operationen: am Ende der Scroll-Operation (z.B. Ende der Mausbewegung) "zittert" die Tabelle an keiner Scroll-Position.