@erickruano/svelte-carousel
Version:
<p align="center"> <img width="186" height="90" src="https://user-images.githubusercontent.com/218949/44782765-377e7c80-ab80-11e8-9dd8-fce0e37c235b.png" alt="Beyonk" /> </p>
149 lines (110 loc) • 5.79 kB
Markdown
<p align="center">
<img width="186" height="90" src="https://user-images.githubusercontent.com/218949/44782765-377e7c80-ab80-11e8-9dd8-fce0e37c235b.png" alt="Beyonk" />
</p>
[](http://standardjs.com) [](https://circleci.com/gh/beyonk-adventures/svelte-carousel) [](https://v2.svelte.dev) [](https://svelte.dev)
Svelte Carousel / Slider
This is a ground-up rewrite of the original Svelte Carousel/Slider using Svelte v3, and [Siema](https://github.com/pawelgrzybek/siema), the goal being a fully working carousel with a tiny size.
This library is pure javascript, so can be used with any framework you like.
The [simplest possible demo](https://svelte.dev/repl/3953567d530b41d087ab7eaa8e7e632a?version=3.22.3)
```
npm install
npm run dev
```
```bash
npm i -D @beyonk/svelte-carousel
```
```jsx
<Carousel>
<div class="slide-content">Slide 1</div>
<div class="slide-content">Slide 2</div>
<div class="slide-content">Slide 3</div>
<div class="slide-content">Slide 4</div>
</Carousel>
<script>
import Carousel from '@beyonk/svelte-carousel'
import { ChevronLeftIcon, ChevronRightIcon } from 'svelte-feather-icons'
</script>
```
You can set the controls to be anything you like, though the default height and width are set to 40px. Just use the slots available to insert your own content.
```bash
npm i -D svelte-feather-icons
```
```jsx
<Carousel>
<span class="control" slot="left-control">
<ChevronLeftIcon />
</span>
<div class="slide-content">Slide 1</div>
...
<div class="slide-content">Slide n</div>
<span class="control" slot="right-control">
<ChevronRightIcon />
</span>
</Carousel>
<script>
import Carousel from './Carousel.svelte'
import { ChevronLeftIcon, ChevronRightIcon } from 'svelte-feather-icons'
</script>
```
If you need to override height and width, you can use CSS:
```css
.control :global(svg) {
width: 100%;
height: 100%;
color:
border: 2px solid
border-radius: 32px;
}
```
You can pass the following attributes:
| Attribute | Type | Default Value | Description |
|-----------|---------|---------------|------------------------------------------------------------------------------------------------------------------------------|
| loop | boolean | true | At the end of the carousel, loop through to the first slide again, seamlessly |
| perPage | integer | 3 | Number of slides on a single page. Note that this needs to be greater than or equal to the number of slides in your carousel |
| autoplay | integer | 0 | Auto-change slide at an interval (in milliseconds). 0 means don't autoplay. |
| duration | number | 200 | Slide transition duration in milliseconds. |
| easing | string | 'ease-out' | It is like a CSS transition-timing-function — describes acceleration curve. |
| startIndex | number | 0 | Index (zero-based) of the starting slide. |
| draggable | boolean | true | Use dragging and touch swiping. |
| multipleDrag | boolean | true | Allow dragging to move multiple slides. |
| dots | boolean | true | Toggles visibility of slider dots.
| controls | boolean | true | Toggles visibility of slider controls. dots. |
| threshold | number | 20 | Touch and mouse dragging threshold (in px). |
| rtl | boolean | false | Enables layout for languages written from right to left (like Hebrew or Arabic). |
perPage can also be set to a responsive object, to change the number of slides based on screen width:
```jsx
<Carousel perPage={{ 800: 3, 500: 2 }}>
// will show 1 slide below 500px width, 2 at 500, 3 at 800.
```
The Carousel components emits the following events:
| Name | Data | Description |
|----------|--------------------------------|--------------------------------------------------------------------------------|
| `change` | `{ currentSlide, slideCount }` | `currentSlide`: The current slide index. Can be a positive or negative integer. `slideCount`: The number of slides. |
You can call left, right, go(slideNumber), pause and resume functions on the slider. For example, for pausing the autoslide while the mouse is hover the carousel
```jsx
<Carousel bind:this={carousel} on:mouseenter={enter} on:mouseleave={leave}>
<div class="slide-content">Slide 1</div>
...
<div class="slide-content">Slide n</div>
</Carousel>
<script>
import Carousel from './Carousel.svelte'
let carousel;
function enter() {
carousel.pause();
}
function leave() {
carousel.resume();
}
</script>
```