framer-motion-carousel
Version:
A simple framer motion carousel component for React
110 lines (86 loc) • 3.85 kB
Markdown
A simple `framer-motion-carousel`, used for `framer-motion`, `chakra-ui`
support `click` and `swipe`, support custom `arrows`, `dots`, easy to use.
*2.x use `framer-motion@6` now*
```jsx
import * as React from "react";
import Carousel from "framer-motion-carousel";
const colors = ["#f90", "#ef0", "#e0f"];
const App = () => (
<div style={{ width: 600, height: 400 }}>
<Carousel>
{colors.map((item, i) => (
<div
key={i}
style={{
width: "100%",
height: "100%",
backgroundColor: colors[i],
}}
></div>
))}
</Carousel>
</div>
);
export default App;
```
`img` element should add `draggable=false`
```jsx
<div style={{ width: 600, height: 400, margin: "0 auto" }}>
<Carousel>
{[1, 2, 3, 4].map((item, i) => (
<img
draggable="false"
src={`./${item}.jpg`}
key={i}
width="100%"
alt=""
/>
))}
</Carousel>
</div>
```
```jsx
// set ref;
const carouselRef = React.useRef();
<div style={{ width: 600, height: 400, margin: "0 auto" }}>
<div style={{display: 'flex', gap: '10px', marginBottom: '10px'}}>
<button onClick={() => carouselRef.current.handlePrev()}>handlePrev</button>
<button onClick={() => carouselRef.current.setIndex(2)}>goto index 2</button>
<button onClick={() => carouselRef.current.handleNext()}>handleNext</button>
</div>
<Carousel ref={carouselRef} autoPlay={false}>
{[1, 2, 3, 4].map((item, i) => (
<img
draggable="false"
src={`./${item}.jpeg`}
key={i}
width="100%"
alt=""
/>
))}
</Carousel>
</div>
```
[](https://carousel-app-772051431.vercel.app)
[](https://github.com/jiangbo2015/framer-motion-carousel/tree/main/example)

| props | type | default | description |
|------------------|--------------------------------------------------------------------------------------|---------|----------------------------------------------------------------------|
| loop | boolean | true | loop play |
| autoPlay | boolean | true | auto play |
| interval | number | 2000 | auto play interval |
| renderArrowLeft | ({handlePrev: () => void, activeIndex: number}) => React.ReactNode | null | custom your arrows, `activeIndex` is current index |
| renderArrowRight | ({handleNext: () => void, activeIndex: number}) => React.ReactNode | null | custom your arrows, `activeIndex` is current index |
| renderDots | ({activeIndex: number, setActiveIndex: (index: number) => void;}) => React.ReactNode | null | custom your dots, `activeIndex` is current index |
| ref | React.Ref | null | Carousel ref, support `handleNext`, `handlePrev`, `setIndex` method |
```
cd example && yarn install
yarn dev
```