react-native-paged-scroll-view
v2.0.4
Published
A higher-order React Native component to compute the current and total pages of a ScrollView
Downloads
34
Maintainers
Readme
react-native-paged-scroll-view
A higher-order React Native component to compute the current and total pages of a ScrollView-compatible component
Note: I've tried and will try to keep this mostly functional and current, but my job no longer involves working with React Native, so it's a little tough to really dig in and get to the bottom of tricky issues. I'll try to maintain this, but I won't be actively improving it. I'll gladly accept PRs though!
Introduction
This module implements a higher-order component that computes the current and total pages contained in a React Native ScrollView (or functionally similar) component. So it's really very simple. Seriously, when you get down to it it's like a division and a floor function. But it attempts to solve layout race conditions, re-layout and other subtleties. This component could trivially be used as a swiper alongside a page indicator but does not implement that itself.
To be clear, this is strictly just a page-computing component. I assume you'll use it with pagingEnabled={true}
, and it doesn't add paged scrolling for Android.
Example
import { ScrollView } from 'react-native'
import AddPaging from 'react-native-paged-scroll-view'
var PagedScrollView = AddPaging(ScrollView)
...
handlePageChange (state) {
console.log('current horizontal page:', state.currentHorizontalPage)
console.log('current vertical page: ', state.currentVerticalPage)
console.log('total horizontal pages: ', state.totalHorizontalPages)
console.log('total vertical pages: ', state.totalVerticalPages)
}
render () {
return (
<PagedScrollView onPageChange={this.handlePageChange.bind(this)}>
...
</PagedScrollView>
)
}
...
Installation
$ npm install react-native-paged-scroll-view
Usage
require('react-native-paged-scroll-view')(Component, [scrollViewRefPropName="ref"])
Wrap either a ScrollView
or a component functionally equivalent (implements onScroll
and similar basic methods). Returns a higher order component with props passed through.
Arguments:
Component
: The component being wrapped. It must implement the basic methods of a ScrollView.scrollViewRefPropName
: the name of the property passed toComponent
that will return the ref. This exists in case you're using a wrapped aScrollView
component for whichref
returns the ref of the wrapper instead of the ref of theScrollView
. If you provide this property, then your wrappedScrollView
should have a propertyref={this.props.<scrollViewRefPropName>}
with your method name inserted. If you're just using aScrollView
though, you should be fine. Suggestions on how to improve this are welcome.
Props:
onPageChange
:function(state)
: Executed on initial layout, when the page changes, or when the inner content changes. Callback is passedstate
object containing:totalHorizontalPages
: total number of horizontal pages, rounded to the nearest integer.totalVerticalPages
: total number of vertical pages, rounded to the nearest integer.currentHorizontalPage
: the current horizontal page, rounded to the nearest integer.currentVerticalPage
: the current vertical page, rounded to the nearest integer.
onInitialization
:function(ref)
: Executed once, when the component is initially mounted and only once the dimensions have been measured. Useful, for example, for scrolling to a specific page once the component is mounted.
Attributes:
ref.scrollX
: current horizontal scroll offsetref.scrollY
: current vertical scroll offsetref.state.currentHorizontalPage
: as defined aboveref.state.currentVerticalPage
: as defined aboveref.state.totalHorizontalPages
: as defined aboveref.state.totalVerticalPages
: as defined above
Methods:
ref.scrollToPage(horizontal, vertical, animated)
: Scroll to a specific page
License
(c) 2015 Ricky Reusser. MIT License.