Disable `overflow-anchor` for virtualScrollDriver to work in Chrome correctly
parent
38fdfbf78c
commit
135573f35b
|
@ -54,9 +54,10 @@ export class DynamicVirtualScrollExample extends React.PureComponent
|
||||||
{
|
{
|
||||||
this.itemElements = [];
|
this.itemElements = [];
|
||||||
return (<div style={{position: 'relative', width: '400px'}}>
|
return (<div style={{position: 'relative', width: '400px'}}>
|
||||||
<div style={{overflowY: 'scroll', height: '400px', width: '400px'}}
|
<div style={{overflowY: 'scroll', height: '400px', width: '400px', overflowAnchor: 'none', outline: 'none'}}
|
||||||
|
tabIndex="1"
|
||||||
ref={e => this.viewport = e}
|
ref={e => this.viewport = e}
|
||||||
onScroll={this.componentDidUpdate}>
|
onScroll={this.driver}>
|
||||||
<div style={{height: this.state.targetHeight+'px'}}>
|
<div style={{height: this.state.targetHeight+'px'}}>
|
||||||
{this.useFixedHeader
|
{this.useFixedHeader
|
||||||
? <div style={{height: '30px'}}></div>
|
? <div style={{height: '30px'}}></div>
|
||||||
|
@ -90,8 +91,7 @@ export class DynamicVirtualScrollExample extends React.PureComponent
|
||||||
</div>);
|
</div>);
|
||||||
}
|
}
|
||||||
|
|
||||||
// We should re-render only when we know we need some items that are not currently rendered
|
driver = () =>
|
||||||
componentDidUpdate = () =>
|
|
||||||
{
|
{
|
||||||
const newState = virtualScrollDriver(
|
const newState = virtualScrollDriver(
|
||||||
{
|
{
|
||||||
|
@ -107,6 +107,11 @@ export class DynamicVirtualScrollExample extends React.PureComponent
|
||||||
this.setStateIfDiffers(newState);
|
this.setStateIfDiffers(newState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
componentDidUpdate = () =>
|
||||||
|
{
|
||||||
|
this.driver();
|
||||||
|
}
|
||||||
|
|
||||||
componentDidMount()
|
componentDidMount()
|
||||||
{
|
{
|
||||||
this.componentDidUpdate();
|
this.componentDidUpdate();
|
||||||
|
|
|
@ -61,6 +61,8 @@ What to do with it:
|
||||||
* `newState.middleItemCount` - item count to be renderer after top placeholder. omit items if it is 0
|
* `newState.middleItemCount` - item count to be renderer after top placeholder. omit items if it is 0
|
||||||
* `newState.middlePlaceholderHeight` - height of the second (middle) placeholder. omit placeholder if it is 0
|
* `newState.middlePlaceholderHeight` - height of the second (middle) placeholder. omit placeholder if it is 0
|
||||||
* `newState.lastItemCount` - item count to be rendered in the end of the list
|
* `newState.lastItemCount` - item count to be rendered in the end of the list
|
||||||
|
* also note that you MUST set `overflow-anchor: none` on your scroll container. You'll end up with
|
||||||
|
`virtualScrollDriver()` not able to finish updating in Chrome if you don't.
|
||||||
|
|
||||||
# Usage example with React
|
# Usage example with React
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue