Scroll lag / stutter when page zoom is exactly 100%
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 35/100
- Type d'issue
- Bug
- Clarté
- À clarifier
- Activité
- À l'abandon
- Stack technique
- typescript
- Domaine
- frontend, performance
Piste de recherche
Commencez par la reproduction Storybook liée dans le dépôt FE-WMS et comparez le défilement à 100 % avec un zoom du navigateur à 90 % et 110 % à l’aide de @tanstack/virtual 3.13.5. Étudiez le comportement signalé de mesure et de mise en page autour de la liste virtualisée, puis vérifiez que le défilement est fluide et cohérent aux trois niveaux de zoom.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Describe the bug
🐛 Bug: Scroll lag / stutter when page zoom is exactly 100%
Description
When using @tanstack/virtual, scrolling becomes noticeably laggy/stuttery if the browser page zoom is set to 100% (default).
Interestingly, the issue disappears and scrolling becomes smooth again when changing the page zoom to 90% or 110%.
This behavior is consistently reproducible and seems to be tied specifically to the 100% zoom level.
🔁 Steps to Reproduce
- Open an app/page that uses
@tanstack/virtual - Set browser zoom to 100%
- Scroll the virtualized list
→ Observe scroll lag / stuttering - Change browser zoom to 90% or 110%
- Scroll again
→ Scrolling becomes smooth
✅ Expected Behavior
Scrolling should be smooth and consistent regardless of browser zoom level (including the default 100%).
❌ Actual Behavior
Scrolling is laggy only when zoom is exactly 100%.
Non-100% zoom levels do not show the issue.
🧠 Additional Notes / Observations
-
This may be related to:
- sub-pixel rounding
- layout measurements using fractional values
getBoundingClientRect,offsetHeight, orResizeObserverbehavior at 100% zoom
-
The issue occurs even on high-performance machines
-
The problem feels like repeated re-layout or recalculation during scroll
🧪 Environment
- Library:
@tanstack/virtual - Browser: (Chrome / Edge / Firefox / Brave)
- OS: (Windows)
- tanstack/virtual version: 3.13.5
📎 Reproduction
Please clone the repository and run Storybook to reproduce the issue.
http://localhost:6006/?path=/story/components-datagrid--default
Repository:
https://github.com/quanghiep03198/FE-WMS
The issue can be observed directly in Storybook and is isolated to the usage of @tanstack/virtual.
Your minimal, reproducible example
http://localhost:6006/?path=/story/components-datagrid--default
Steps to reproduce
Scrolling should be smooth and consistent regardless of browser zoom level (including the default 100%).
Expected behavior
When using @tanstack/virtual, scrolling becomes noticeably laggy/stuttery if the browser page zoom is set to 100% (default).
Interestingly, the issue disappears and scrolling becomes smooth again when changing the page zoom to 90% or 110%.
This behavior is consistently reproducible and seems to be tied specifically to the 100% zoom level.
How often does this bug happen?
Every time
Screenshots or Videos
https://www.loom.com/share/8fedb0086ade42d5855986d2951c856d
Platform
- OS: Windows
- Browsers: Chrome/Edge/Brave
tanstack-virtual version
3.13.5
TypeScript version
5.7.3
Additional context
When using default page zoom (100%)
Terms & Code of Conduct
- I agree to follow this project's Code of Conduct
- I understand that if my bug cannot be reliable reproduced in a debuggable environment, it will probably not be fixed and this issue may even be closed.
- Langage dominant
- TypeScript
- Étoiles
- 7.1k
- Forks
- 472
- Merge moyen
- 1 j 1 h
- PR mergées (30 j)
- 11
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de TanStack/virtual
-
measureElement caches 0 size for nodes that aren't attached yet (Vue: rows stack at start 0 and the list scrolls away on mount)Peut-être pris @webn00b l’a pris il y a 12 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
anchorTo: 'end' loses the end when the scroll element shrinksPeut-être pris @langleyd l’a pris il y a 1 jour. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 68/100
Les mainteneurs répondent en général sous 1 jour
-
`scrollToIndex(last, { align: 'end' })` stays short of the end after a measured row grows (virtual-core ≥ 3.17.0)Peut-être pris @minwookshin l’a pris il y a 9 jours. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 55/100
TanStack/virtual#1290 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
virtual-core: desktop Safari drops the prepend anchor write when history lands during the top rubber-band bouncePeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 38/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 62/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de TanStack/virtual
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
farbenmeer/tapi#531 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
naver/egjs-flicking#971 ·
-
Renderer treats a sub-pixel width difference as a resize, which cancels the `motion()` entranceOuverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
Les mainteneurs répondent en général sous 1 jour
-
Tenant
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
MTES-MCT/Dossier-Facile-Frontend#2061 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
backnotprop/plannotator#1784 ·
Les mainteneurs répondent en général sous 1 jour