Skip to content

astro-swiper

Astro Swiper - native component for Swiper.
Use for slides, carousel, photo swiper.
Terminal window
npm install astro-swiper
pnpm add astro-swiper
bun install astro-swiper

Read the full doc on Github

Swiper options documentation can be found on swiperjs.com

Autoplay Example

Autoplay example: slider of 3 images, looping.

Full code

Code Snippet

---
import { Swiper, SwiperWrapper, SwiperSlide } from "astro-swiper";
---
<Swiper
options={{ // check options at https://swiperjs.com/swiper-api
autoplay: {
delay: 700,
disableOnInteraction: false,
waitForTransition: false,
},
loop: true,
}}>
<SwiperWrapper>
<SwiperSlide> <img src=... /> </SwiperSlide>
<SwiperSlide> <img src=... /> </SwiperSlide>
<SwiperSlide> <img src=... /> </SwiperSlide>
</SwiperWrapper>
</Swiper>

Navigation Example

Navigation example: slider of 3 images, with arrow or swiping to navigate from a slide to another one.

Note that if ones does not want to use the default swiper class swiper-button-prev and swiper-button-next to use its own css, it is possible to use

<SwiperButtonPrev addDefaultClass={false} class='my-swiper-button-prev'/>

Full code

Code Snippet

---
...
import { SwiperButtonPrev, SwiperButtonNext } from "astro-swiper";
import type { AstroSwiperType } from "astro-swiper";
const astroSwiperOptions: AstroSwiperType = {
options: {
loop: true,
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
},
};
---
<Swiper>
<SwiperWrapper>
<SwiperSlide> <img src=... /> </SwiperSlide>
<SwiperSlide> <img src=... /> </SwiperSlide>
<SwiperSlide> <img src=... /> </SwiperSlide>
</SwiperWrapper>
<SwiperButtonPrev />
<SwiperButtonNext />
</Swiper>

Pagination Example

Pagination example: slider of 3 images, with autoplay and pagination: 3 dots indicates which slide is displayed.

Full code

Code Snippet

---
...
import { SwiperButtonPrev, SwiperButtonNext } from "astro-swiper";
...
---
<Swiper>
<SwiperWrapper>
<SwiperSlide> <img src=... /> </SwiperSlide>
<SwiperSlide> <img src=... /> </SwiperSlide>
<SwiperSlide> <img src=... /> </SwiperSlide>
</SwiperWrapper>
<SwiperPagination />
</Swiper>

Thumbnail Example

Thumbnail example: a slider, with thumbnails at the bottom to see the progress.

The code is made of:

  • 2 slides: 1 for the main slide, and one for the thumbnail
  • each slide have a uniqueClass defined
  • the main slider refers to the thumbnail one using linkToThumbUniqueClass being the uniqueClass of the thumbnail slide
  • the thumbnail slider has an option to set the number of thumbs to show

Full code

Code Snippet

---
import { Swiper, SwiperWrapper, SwiperSlide } from "astro-swiper";
---
<Swiper
uniqueClass="myswiper-main"
linkToThumbUniqueClass="myswiper-thumbnail"
options={{ ... }}>
<SwiperWrapper>
<SwiperSlide> ... </SwiperSlide>
<SwiperSlide> ... </SwiperSlide>
...
</SwiperWrapper>
</Swiper>
<Swiper
uniqueClass="myswiper-thumbnail"
options={{
slidesPerView: 4,
freeMode: true,
watchSlidesProgress: true,
...
}}>
<SwiperWrapper>
<SwiperSlide> ... </SwiperSlide>
<SwiperSlide> ... </SwiperSlide>
...
</SwiperWrapper>
</Swiper>

How others are using astro-swiper

Here is how others are using astro-swiper, as found in public github repo:

API

<Swiper/>

Main Swiper element. Inherits all HTMLAttributes<'div'> (class…) attributes.

NameTypeDefaultDescription
optionsSwiperOptionsSwiperjs defaultcf. Swiperjs doc
options.astroCf. below descriptionundefinedastro specific options
addDefaultClassBooleantrueAdd class .swiper when true

options.astro is as follows:

NameTypeDefaultDescription
useCustomElementbooleantruewhen false, use a <div> to be as close as possible to swiperjs default. Use a custom element <astro-swiper> otherwise.
thumbSwiperUniqueSelectorstring starting with # or .undefinedunique selector of the thumbnail swiper to link with, when using the thumbs module. When a thumbnail swiper is build, this parameter is provided on the main slider (the one with big slides, not the one to track the progress) and equal the unique selector of the thumbnail swiper (the one to track the progress). It is used to link the main swiper with the thumbnail swiper when using the thumbs module.
intersectionObserver.initSwiperbooleanfalsetrue to initialize the swiper when the element appears in the screen
intersectionObserver.disconnectOnInitbooleanfalsetrue to disconnect the observer once the swiper is initialized
intersectionObserver.controlAutoplaybooleanfalsetrue to start and stop the autoplay when the swiper appears and disappears from the screen, respectively
intersectionObserver.optionsIntersectionObserverInitundefinedcf. mdn docs
<SwiperWrapper/>

Wrapper of all slides. Inherits all HTMLAttributes<'div'> (class…) attributes.

NameTypeDefaultDescription
addDefaultClassBooleantrueAdd class .swiper-wrapper when true
<SwiperSlide/>

A single slide. Inherits all HTMLAttributes<'div'> (class…) attributes.

NameTypeDefaultDescription
addDefaultClassBooleantrueAdd class .swiper-slide when true
<SwiperPagination/>

Pagination dots. Inherits all HTMLAttributes<'div'> (class…) attributes.

NameTypeDefaultDescription
addDefaultClassBooleantrueAdd class .swiper-pagination when true
<SwiperButtonPrev/> and <SwiperButtonNext/>

Navigation arrows. Inherits all HTMLAttributes<'div'> (class…) attributes.

NameTypeDefaultDescription
addDefaultClassBooleantrueAdd class .swiper-button-prev or swiper-button-next when true
<SwiperScrollbar/>

Scrollbar. Inherits all HTMLAttributes<'div'> (class…) attributes.

NameTypeDefaultDescription
addDefaultClassBooleantrueAdd class .swiper-scrollbar when true
<SwiperLazyPreloader/>

Slide lazy loader. To be used inside a <SwiperSlide/>. Inherits all HTMLAttributes<'div'> (class…) attributes.

NameTypeDefaultDescription
addDefaultClassBooleantrueAdd class .swiper-lazy-preloader when true
getSwiperFromUniqueSelector()

Function to be used in script part, to be able to retrieve the swiper instance given a unique selector (starting with a . or a #), once the load event is fired. This allows to use functions and events in swiper.

Here is a snipset of the Custom Pagination Demo:

<Swiper
class="swiper-demo-pagination-custom"
options={{
...
init: false, // init in the script part
}}
>
...
<SwiperPagination />
</Swiper>
<script>
import type { PaginationOptions } from 'astro-swiper/swiper';
import { getSwiperFromUniqueSelector } from 'astro-swiper'
window.addEventListener('load', () => {
const swiper = getSwiperFromUniqueSelector('.swiper-demo-pagination-custom');
(swiper!.params.pagination as PaginationOptions)!.renderBullet = function (index: number, className: string) {
return '<span class="' + className + '">' + (index + 1) + "</span>";
}
swiper!.init()
})
</script>
Swiper types

Swiper types are available importing types from astro-swiper/swiper, such as

import type { PaginationOptions } from 'astro-swiper/swiper';

Swiperjs demo

Here is how swiperjs.com demos are implemented with astro-swiper:

Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Full Astro Code
Slides Per View Auto Demo
Demo from SwiperJS
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Full Astro Code
Scroll Container Demo
Vertical Scroll Demo from SwiperJS
Slide 3

Slide 4

Lorem ipsum dolor sit amet, consectetur adipiscing elit. In luctus, ex eu sagittis faucibus, ligula ipsum sagittis magna, et imperdiet dolor lectus eu libero. Vestibulum venenatis eget turpis sed faucibus. Maecenas in ullamcorper orci, eu ullamcorper sem. Etiam elit ante, luctus non ante sit amet, sodales vulputate odio. Aenean tristique nisl tellus, sit amet fringilla nisl volutpat cursus. Quisque dignissim lectus ac nunc consectetur mattis. Proin vel hendrerit ipsum, et lobortis dolor. Vestibulum convallis, nibh et tincidunt tristique, nisl risus facilisis lectus, ut interdum orci nisl ac nunc. Cras et aliquam felis. Quisque vel ipsum at elit sodales posuere eget non est. Fusce convallis vestibulum dolor non volutpat. Vivamus vestibulum quam ut ultricies pretium.

Suspendisse rhoncus fringilla nisl. Mauris eget lorem ac urna consectetur convallis non vel mi. Donec libero dolor, volutpat ut urna sit amet, aliquet molestie purus. Phasellus faucibus, leo vel scelerisque lobortis, ipsum leo sollicitudin metus, eget sagittis ante orci eu ipsum. Nulla ac mauris eu risus sagittis scelerisque iaculis bibendum mauris. Cras ut egestas orci. Cras odio risus, sagittis ut nunc vitae, aliquam consectetur purus. Vivamus ornare nunc vel tellus facilisis, quis dictum elit tincidunt. Donec accumsan nisi at laoreet sodales. Cras at ullamcorper massa. Maecenas at facilisis ex. Nam mollis dignissim purus id efficitur.

Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Full Astro Code
Slides Per Group Skip Demo
Demo from SwiperJS
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4

Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Subtitle

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam dictum mattis velit, sit amet faucibus felis iaculis nec. Nulla laoreet justo vitae porttitor porttitor. Suspendisse in sem justo.

Slide 4
Subtitle

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam dictum mattis velit, sit amet faucibus felis iaculis nec. Nulla laoreet justo vitae porttitor porttitor. Suspendisse in sem justo.

Slide 5
Subtitle

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam dictum mattis velit, sit amet faucibus felis iaculis nec. Nulla laoreet justo vitae porttitor porttitor. Suspendisse in sem justo.

Full Astro Code
Responsive Breakpoints Demo
Demo from SwiperJS
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Full Astro Code
Zoom Demo
Double-click on the image to zoom in Demo from SwiperJS
DemoSlideableMenu Demo

WORK IN PROGRESS
Full Astro Code
Change Direction Demo
Resize to dynamically change the swiper's direction. Demo from SwiperJS
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9

Do you need help to integrate astro-swiper in your astro template / component? I’ll be happy to help!

  • mention me with @pascal-brand38 in an issue on your own github repo
  • or fill a GitHub issue in astro-swiper github

Let’s star the project as you like it.