Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Preact Component that renders homogeneous children only when visible

License

NotificationsYou must be signed in to change notification settings

developit/preact-scroll-viewport

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NPMTravis

A compositional component that renders its children based on the current viewport.

Useful for those super important business applications where one must showall million rows.

preview

Usage Example

Simply wrap a large collection of children in this component, and they will be rendered based on the viewport.You can define a default row height (defaultRowHeight) to use prior to dimensions being available, or a static row height (rowHeight) to avoid style recalculation entirely. IfrowHeight is not provided, the height of the first row will be calculated and extrapolated.

// create 100,000 children:letchildren=[];for(leti=1;i<100000;i++){children.push(<divclass="row">{i}</div>);}// ...but only render what is in-viewport:render(<ScrollViewportrowHeight={22}>{children}</ScrollViewport>);

Props

PropTypeDescription
rowHeightNumberStatic height of a row (prevents style recalc)
defaultRowHeightNumberInitial height of a row prior to dimensions being available
overscanNumberNumber of extra rows to render above and below visible list. Defaults to 10. *
syncBooleanIftrue, forces synchronous rendering **

* Why overscan? Rendering normalized blocks of rows reduces the number of DOM interactions by grouping all row renders into a single atomic update.

** About synchronous rendering: It's best to try withoutsync enabled first. If the normal async rendering behavior is fine, leave sync turned off. If you see flickering, enabling sync will ensure every update gets out to the screen without dropping renders, but does so at the expense of actual framerate.

Without OverscanWith Overscan

Simple Example

View this example on JSFiddle

importScrollViewportfrom'preact-scroll-viewport';classDemoextendsComponent{// 30px tall rowsrowHeight=30;render(){// Generate 100,000 rows of dataletrows=[];for(letx=1e5;x--;)rows[x]=`Item #${x+1}`;return(<ScrollViewportclass="list"rowHeight={this.rowHeight}>{rows.map(row=>(<divclass="row">{row}</div>))}</ScrollViewport>);}}render(Demo,document.body);

License

MIT

About

Preact Component that renders homogeneous children only when visible

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors2

  •  
  •  

[8]ページ先頭

©2009-2025 Movatter.jp