From abd1227a948e4680b69e937493c17d12653a6362 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Mon, 21 Nov 2016 21:10:11 -0800 Subject: [PATCH] [change] ScrollView props and event handling - Update 'scrollEventThrottle' prop - Filter non-DOM props - Persist debounced scroll events. Fix #209 --- .../ScrollView/ScrollViewExample.js | 4 ++-- src/components/ScrollView/ScrollViewBase.js | 23 +++++++++++++++---- src/components/ScrollView/index.js | 8 +++++-- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/examples/components/ScrollView/ScrollViewExample.js b/examples/components/ScrollView/ScrollViewExample.js index ac86e01a..e7be0bbe 100644 --- a/examples/components/ScrollView/ScrollViewExample.js +++ b/examples/components/ScrollView/ScrollViewExample.js @@ -7,8 +7,8 @@ storiesOf('component: ScrollView', module) console.log('ScrollView.onScroll', e)} - scrollEventThrottle={1} // 1 event per second + onScroll={e => { console.log('ScrollView.onScroll', e); } } + scrollEventThrottle={1000} // 1 event per second style={styles.scrollViewStyle} > {Array.from({ length: 50 }).map((item, i) => ( diff --git a/src/components/ScrollView/ScrollViewBase.js b/src/components/ScrollView/ScrollViewBase.js index 878f4cfc..dbbd5167 100644 --- a/src/components/ScrollView/ScrollViewBase.js +++ b/src/components/ScrollView/ScrollViewBase.js @@ -23,12 +23,16 @@ export default class ScrollViewBase extends Component { onScrollEndDrag: PropTypes.func, onTouchMove: PropTypes.func, onWheel: PropTypes.func, + removeClippedSubviews: PropTypes.bool, scrollEnabled: PropTypes.bool, - scrollEventThrottle: PropTypes.number + scrollEventThrottle: PropTypes.number, + showsHorizontalScrollIndicator: PropTypes.bool, + showsVerticalScrollIndicator: PropTypes.bool }; static defaultProps = { - scrollEnabled: true + scrollEnabled: true, + scrollEventThrottle: 0 }; constructor(props) { @@ -48,6 +52,7 @@ export default class ScrollViewBase extends Component { } _handleScroll = (e) => { + e.persist(); const { scrollEventThrottle } = this.props; // A scroll happened, so the scroll bumps the debounce. this._debouncedOnScrollEnd(e); @@ -81,12 +86,22 @@ export default class ScrollViewBase extends Component { _shouldEmitScrollEvent(lastTick, eventThrottle) { const timeSinceLastTick = Date.now() - lastTick; - return (eventThrottle > 0 && timeSinceLastTick >= (1000 / eventThrottle)); + return (eventThrottle > 0 && timeSinceLastTick >= eventThrottle); } render() { const { - onMomentumScrollBegin, onMomentumScrollEnd, onScrollBeginDrag, onScrollEndDrag, scrollEnabled, scrollEventThrottle, // eslint-disable-line + /* eslint-disable */ + onMomentumScrollBegin, + onMomentumScrollEnd, + onScrollBeginDrag, + onScrollEndDrag, + removeClippedSubviews, + scrollEnabled, + scrollEventThrottle, + showsHorizontalScrollIndicator, + showsVerticalScrollIndicator, + /* eslint-enable */ ...other } = this.props; diff --git a/src/components/ScrollView/index.js b/src/components/ScrollView/index.js index 8f65a543..7dd13608 100644 --- a/src/components/ScrollView/index.js +++ b/src/components/ScrollView/index.js @@ -27,6 +27,7 @@ const ScrollView = React.createClass({ keyboardDismissMode: PropTypes.oneOf([ 'none', 'interactive', 'on-drag' ]), onContentSizeChange: PropTypes.func, onScroll: PropTypes.func, + pagingEnabled: PropTypes.bool, refreshControl: PropTypes.element, scrollEnabled: PropTypes.bool, scrollEventThrottle: PropTypes.number, @@ -97,10 +98,13 @@ const ScrollView = React.createClass({ const { contentContainerStyle, horizontal, - keyboardDismissMode, // eslint-disable-line onContentSizeChange, - onScroll, // eslint-disable-line refreshControl, + /* eslint-disable */ + keyboardDismissMode, + onScroll, + pagingEnabled, + /* eslint-enable */ ...other } = this.props;