horizontal slide transitions between components
react-view-slider
Not another carousel; a simpler component that animates horizontal slide transitions between steps of a wizard or levels of a drilldown.
Usage
npm install --save react-view-slider
import React from 'react'
import ReactDOM from 'react-dom'
import ViewSlider from 'react-view-slider'
// This function renders the view at the given index.
// At minimum you should pass the key, ref, style, and className props to the returned element.
const renderView = ({index, key, ref, style, className, active, transitionState}) => (
<div key={key} ref={ref} style={style} className={className}>
<h3>View {index}</h3>
<p>I am {active ? 'active' : 'inactive'}</p>
<p>transitionState: {transitionState}</p>
</div>
)
// activeView specifies which view should currently be showing. Whenever you change it, ViewSlider will make the
// view at the new activeView horizontally slide into view.
ReactDOM.render(
<ViewSlider
renderView={renderView}
numViews={3}
activeView={0}
animateHeight
/>,
document.getElementById('root')
)
Props
renderView: (props: ViewProps) => React.Element<any>
(required)
This function renders each view. ViewSlider
will call it with the following props
:
index: number
- the index of the view (starting at 0)key: number
- the key you should pass to the returned elementref: (c: HTMLElement) => any
- the ref you should pass to the returned elementstyle: Object
- the style you should pass to the returned elementactive: boolean
- whether the view should currently be showingtransitionState: 'in' | 'out' | 'entering' | 'leaving'
- the view's transition state
At minimum you should pass the key
, ref
, style
, and className
props to the returned element.
numViews: number
(required)
The number of views present. ViewSlider
will only render all views when transitioning; when idle, it will
only render the active view.
activeView: number
(required)
The index of the view that should be showing. Whenever you change this, ViewSlider
will animate a horizontal slide
transition to the view at the new index.
keepViewsMounted: boolean
(default: false
)
If true
, ViewSlider
will keep all views mounted after transitioning, not just the active view.
You may want to use this if there is a noticeable lag while other views mount at the beginning of a transition.
However, it disables height animation and will cause the height of ViewSlider
to be the max of all views' heights,
so you will get best results if you also use fillParent={true}
.
animateHeight: boolean
(default: true
)
If truthy, ViewSlider
will animate its height to match the height of the view at activeView
.
transitionDuration: number
(default: 500
)
The duration of the transition between views.
transitionTimingFunction: string
(default: 'ease'
)
The timing function for the transition between views.
prefixer: Prefixer
If given, overrides the inline-style-prefixer
used to autoprefix inline styles.
fillParent: boolean
(default: false
)
If truthy, ViewSlider
will use absolute positioning on itself and its views to fill its parent element.
className: string
Any extra class names to add to the root element.
style: Object
Extra inline styles to add to the root element.
viewportClassName: string
Any extra class names to add to the inner "viewport" element.
viewportStyle: Object
Extra inline styles to add to the inner "viewport" element.
rootRef: (node: ?HTMLDivElement) => any
The ref
to pass to the root <div>
element rendered by ViewSlider
.
viewportRef: (node: ?HTMLDivElement) => any
The ref
to pass to the viewport <div>
element rendered inside the root <div>
by ViewSlider
.
withTransitionContext
import ViewSlider from 'react-view-slider/lib/withTransitionContext'
This works exactly like ViewSlider
except that it renders its views within a TransitionContext
component from
react-transition-context
with the given transitionState
. This is useful for doing things like focusing an <input>
element after one of the views has transitioned in.
SimpleViewSlider
This is a wrapper for ViewSlider
that takes a single child element. It renders the ViewSlider
with the child's key
(converted to a number) as the activeView
and caches past child elements by key.
Example
import SimpleViewSlider from 'react-view-slider/lib/simple'
ReactDOM.render(
<SimpleViewSlider>
<div key={0}>
This is view 0
</div>
</SimpleViewSlider>,
document.getElementById('root')
)
// Rendering a child with a different key will trigger the transition.
ReactDOM.render(
<SimpleViewSlider>
<div key={1}>
This is view 1
</div>
</SimpleViewSlider>,
document.getElementById('root')
)
If you want to use SimpleViewSlider
with react-transition-context
,
use react-view-slider/lib/simpleWithTransitionContext
.