Skip to content

Conversation

Soxasora
Copy link
Member

@Soxasora Soxasora commented Aug 10, 2025

Description

Reopens #2407
If in the viewport we have a textarea, preserveScroll will use it as the anchor element to determine if something has moved.
If multiple textareas are present in the viewport, the focused one is preferred, otherwise the first in the tree will be picked as anchor.

Jitteriness

Also removes the MutationObserver used to do calculations on the most updated DOM, as it was causing page blocks. It was a precautionary measure that got obsolete by using two RAFs for the textarea anchor support.

Scroll preservation now also bails when there's some form of scrolling happening, avoiding jittery scrolling.

We now preserve scroll even if we're at the top of the page, this allows the active textbox/center ref to stay in focus even on short posts.

TODO

Explore better performance

Screenshots

Textarea is the preferred anchor element, with fallback

textarea2.mp4

incredibly fumbled on the compression settings

Additional Context

This required an additional layer of requestAnimationFrame: some browsers may have their own anonymous content, like text extensions and such, deferring textarea/input renders.

It still fallbacks to picking a ref at the middle of the viewport in absence of textareas

Checklist

Are your changes backward compatible? Please answer below:

For example, a change is not backward compatible if you removed a GraphQL field or dropped a database column.
Yes

On a scale of 1-10 how well and how have you QA'd this change and any features it might affect? Please answer below:
7, Brave, Safari, Chrome

For frontend changes: Tested on mobile, light and dark mode? Please answer below:
n/a

Did you introduce any new environment variables? If so, call them out explicitly here:
n/a

@Soxasora Soxasora changed the title auto show: use textarea as anchor and auto show: use textarea as the anchor element if available Aug 10, 2025
@Soxasora Soxasora marked this pull request as draft August 10, 2025 00:38
@Soxasora
Copy link
Member Author

Soxasora commented Aug 10, 2025

While getting rid of the MutationObserver did reduce the jitteriness, preserving the scroll position can still cause it. I'm drafting this to take a closer look at the jittery scrolling.

edit: I'm not perceiving jitteriness, MutationObserver was indeed causing page blocks and the textarea deferred rendering might have contributed to this.

@Soxasora Soxasora marked this pull request as ready for review August 10, 2025 11:00
@Soxasora Soxasora marked this pull request as draft August 11, 2025 21:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant