nuka-carousel
Version:
Pure React Carousel
245 lines (170 loc) • 6.06 kB
Markdown
# nuka-carousel
A Pure ReactJS Carousel Component

### Install
```
npm install nuka-carousel
```
### Example
```javascript
'use strict';
var React = require('react');
var createReactClass = require('create-react-class');
var Carousel = require('nuka-carousel');
const App = createReactClass({
mixins: [Carousel.ControllerMixin],
render() {
return (
<Carousel>
<img src="http://placehold.it/1000x400/ffffff/c0392b/&text=slide1"/>
<img src="http://placehold.it/1000x400/ffffff/c0392b/&text=slide2"/>
<img src="http://placehold.it/1000x400/ffffff/c0392b/&text=slide3"/>
<img src="http://placehold.it/1000x400/ffffff/c0392b/&text=slide4"/>
<img src="http://placehold.it/1000x400/ffffff/c0392b/&text=slide5"/>
<img src="http://placehold.it/1000x400/ffffff/c0392b/&text=slide6"/>
</Carousel>
)
}
});
module.exports = App;
```
### Running demo locally
The demo can be launched on local machine via `webpack-dev-server`. Run the following:
```javascript
// if webpack-dev-server is not installed globally
./node_modules/.bin/webpack-dev-server
```
Now, you can access the application on your localhost at following url: <a href="http://localhost:8080/demo" target="_blank">Demo</a>
### Props
#### afterSlide
`React.PropTypes.func`
Hook to be called after a slide is changed.
#### autoplay
`React.PropTypes.bool`
Autoplay mode active. Defaults to false.
#### autoplayInterval
`React.PropTypes.number`
Interval for autoplay iteration. Defaults to 3000.
#### beforeSlide
`React.PropTypes.func`
Hook to be called before a slide is changed.
#### cellAlign
`React.PropTypes.oneOf(['left', 'center', 'right'])`
When displaying more than one slide, sets which position to anchor the current slide to.
#### cellSpacing
`React.PropTypes.number`
Space between slides, as an integer, but reflected as `px`
#### data
`React.PropTypes.func`
Used with the ControllerMixin to add carousel data to parent state.
#### decorators
`React.PropTypes.array`
An array of objects that supply internal carousel controls.
Decorator objects have `component`, `position` & `style` properties. `component` takes a React component, `position` takes a predefined position string and `style` takes an object of styles to be applied to the decorator. See an example below:
```javascript
var Decorators = [{
component: createReactClass({
render() {
return (
<button
onClick={this.props.previousSlide}>
Previous Slide
</button>
)
}
}),
position: 'CenterLeft',
style: {
padding: 20
}
}];
// Valid position properties are TopLeft, TopCenter, TopRight
// CenterLeft, CenterCenter, CenterRight, BottomLeft, BottomCenter
// and BottomRight
```
#### dragging
`React.PropTypes.bool`
Enable mouse swipe/dragging
#### easing
`React.PropTypes.string`
Animation easing function. See valid easings here: [https://github.com/chenglou/tween-functions](https://github.com/chenglou/tween-functions)
#### framePadding
`React.PropTypes.string`
Used to set the margin of the slider frame. Accepts any string dimension value such as `"0px 20px"` or `"500px"`.
#### frameOverflow
`React.PropTypes.string`
Used to set overflow style property on slider frame. Defaults to `hidden`.
#### edgeEasing
`React.PropTypes.string`
Animation easing function when swipe exceeds edge. See valid easings here: [https://github.com/chenglou/tween-functions](https://github.com/chenglou/tween-functions)
#### initialSlideHeight
`React.PropTypes.number`
Initial height of the slides in pixels.
#### initialSlideWidth
`React.PropTypes.number`
Initial width of the slides in pixels.
#### slideIndex
`React.PropTypes.number`
Manually set the index of the slide to be shown.
#### slidesToShow
`React.PropTypes.number`
Slides to show at once.
#### slidesToScroll
```
slidesToScroll: React.PropTypes.oneOfType([
React.PropTypes.number,
React.PropTypes.oneOf(['auto'])
])
```
Slides to scroll at once. Set to `"auto"` to always scroll the current number of visible slides.
#### slideWidth
`React.PropTypes.oneOfType([React.PropTypes.string, React.PropTypes.number])`
Manually set slideWidth. If you want hard pixel widths, use a string like `slideWidth="20px"`, and if you prefer a percentage of the container, use a decimal integer like `slideWidth={0.8}`
#### speed
`React.PropTypes.number`
Animation duration.
#### swiping
`React.PropTypes.bool`
Enable touch swipe/dragging
#### vertical
`React.PropTypes.bool`
Enable the slides to transition vertically.
#### width
`React.PropTypes.string`
Used to hardcode the slider width. Accepts any string dimension value such as `"80%"` or `"500px"`.
#### wrapAround
`React.PropTypes.bool`
Sets infinite wrapAround mode. Defaults to `false`
### ControllerMixin
The ControllerMixin provides a way to add external controllers for a carousel. To use the controller mixin, add it to your parent component as shown below:
```javascript
const App = createReactClass({
mixins: [Carousel.ControllerMixin],
render() {
return (
<Carousel ref="carousel" data={this.setCarouselData.bind(this, 'carousel')}>
...
</Carousel>
)
}
});
```
It is required to give your component a ref value, and to pass the setCarouselData method to the data prop with the same ref as an argument.
After setting this up, your parent component has a carousels object in it's state. You can now control your carousels from other child components:
```javascript
const App = createReactClass({
mixins: [Carousel.ControllerMixin],
render() {
return (
<Carousel ref="carousel" data={this.setCarouselData.bind(this, 'carousel')}>
...
</Carousel>
{this.state.carousels.carousel ? <button type="button" onClick={this.state.carousels.carousel.goToSlide.bind(null,4)}>
Go to slide 5
</button> : null}
)
}
});
```
### Contributing
See the [Contribution Docs](CONTRIBUTING.md).