LearnNewsExamplesServices
Frontmatter
id6468
titlecomponent.Base: vdom => add a scroll attribute
stateOpen
labels
enhancementno auto close
assignees[]
createdAtFeb 19, 2025, 12:25 PM
updatedAtJun 4, 2025, 12:24 PM
githubUrlhttps://github.com/neomjs/neo/issues/6468
authortobiu
commentsCount2
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]

component.Base: vdom => add a scroll attribute

Openenhancementno auto close
tobiu
tobiu commented on Feb 19, 2025, 12:25 PM

While it is not possible to set the scroll position on DOM level, this would not be a problem for neo: a delta would contain a changed scrollLeft or scrollTop value, and could easily programmatically adjust the scroll state once the node is painted or updated.

E.g.:

{tag: 'div', scroll: {top: '100px'}}
  • For getting deltas including scroll changes, Neo.vdom.Vnode also needs to get the new scroll attribute.
  • It is important for this scenario, that user based scroll changes also update the related vdom & vnode attributes for the matching component, otherwise we could get deltas when there is no need for a change.

Rationale where I would use it:

https://github.com/user-attachments/assets/9a640ef7-ff2c-4b47-bc27-ee82665bbd9a

I know it is minor, but if you look close, you can see that the scrolling (sometimes painting new rows outside the buffer range on the fly) and the selection change do not always happen inside the same animation frame.

The view triggers an update, passing vdom&vnode to the vdom worker, it figures out the deltas and applies them inside main (cycling rows). in parallel the app worker directly sends a request to main to adjust the scroll position.

tobiu added the enhancement label on Feb 19, 2025, 12:25 PM
tobiu removed the stale label on Jun 4, 2025, 12:24 PM
tobiu added the no auto close label on Jun 4, 2025, 12:24 PM
tobiu reopened this issue on Jun 4, 2025, 12:24 PM