Home

Awesome

<div align="center"> <img src="https://raw.githubusercontent.com/sharifclick/svelte-swipe/master/svelte-swipe.png" alt="Svelte Swipe" width="300" /> </div> <div align="center"> <a href="https://www.npmjs.com/package/svelte-swipe"><img src="https://img.shields.io/npm/v/svelte-swipe?style=for-the-badge"/></a> <a href="https://www.npmjs.com/package/svelte-swipe"> <img src="https://img.shields.io/npm/dm/svelte-swipe?style=for-the-badge"/> </a> <a href="https://bundlephobia.com/result?p=svelte-swipe"> <img src="https://img.shields.io/bundlephobia/min/svelte-swipe?style=for-the-badge"/> </a> <a href="https://bundlephobia.com/result?p=svelte-swipe"> <img src="https://img.shields.io/bundlephobia/minzip/svelte-swipe?style=for-the-badge"/> </a> <a href="https://svelte.dev"><img src="https://img.shields.io/badge/svelte-v3-blueviolet?style=for-the-badge"/></a> <a href="https://svelte.dev"><img src="https://img.shields.io/badge/svelte-v4-blue?style=for-the-badge"/></a> </div>

English / Korean / įŽ€äŊ“中文

Swipable items wrapper component for Svelte :fire: :boom: (zero dependencies)

🚀See it in Action

Installation

npm i -D svelte-swipe

Usage

<script>

  import { Swipe, SwipeItem } from "svelte-swipe";

  const swipeConfig = {
    autoplay: false,
    delay: 2000,
    showIndicators: true,
    transitionDuration: 1000,
    defaultIndex: 0,
  };
</script>

<style>
  .swipe-holder{
    height: 30vh;
    width: 100%;
  }
  img{
    max-width: 100%;
    height: auto;
  }
</style>

<div class="swipe-holder">
  <Swipe {...swipeConfig}>
    <SwipeItem>
      <img src="./images/1.jpg" alt="">
    </SwipeItem>

    <SwipeItem>
      <img src="./images/2.jpg" alt="">
    </SwipeItem>

    <SwipeItem>
      <img src="./images/3.jpg" alt="">
    </SwipeItem>

    <SwipeItem>
      <img src="./images/4.jpg" alt="">
    </SwipeItem>
  </Swipe>
</div>

Supports Dynamic height (from child) đŸ”Ĩ


<script>
  let swipe_holder_height = 0;

  function heightChanged({detail}) {
    swipe_holder_height = detail.height;
  }

</script>

<div class="swipe-holder" style="height:{swipe_holder_height}px">
  <Swipe bind:active_item>
    {#each items as item, i}
      <SwipeItem
        active={active_item == i}
        allow_dynamic_height={true}
        on:swipe_item_height_change={heightChanged}>
        ....
      </SwipeItem>
    {/each}
  </Swipe>
</div>

Supports Infinite swipe đŸ”Ĩ



<div class="swipe-holder" style="height:{swipe_holder_height}px">
  <Swipe bind:active_item>
    {#each items as item, i}
      <SwipeItem
        active={active_item == i}
        allow_infinite_swipe={true}>
        ....
      </SwipeItem>
    {/each}
  </Swipe>
</div>

Vertical Swipe đŸ”Ĩ


<div class="swipe-holder">
  <Swipe is_vertical={true}>
    <SwipeItem>
      ...
    </SwipeItem>
    ...
  </Swipe>
</div>

Pointer event inside Swipe Item

<style>
   ...

  .has-pointer-event{
    pointer-events:fill;
  }
</style>

<div class="swipe-holder">
  <Swipe>
    <SwipeItem>
      <div>
        <button class="has-pointer-event" on:click={sayHi}>Say Hi</button>
      </div>
    </SwipeItem>
    ...
  </Swipe>
</div>

Programmatically change slides


<script>
  let SwipeComp;

  function nextSlide(){
   SwipeComp.nextItem()
  }

  function prevSlide(){
    SwipeComp.prevItem()
  }

</script>
<div class="swipe-holder">
  <Swipe bind:this={SwipeComp}>
    <SwipeItem>....</SwipeItem>
    ...
  </Swipe>
</div>
<div class="buttons-holder">
  <button type="button" on:click={prevSlide}>Prev</button>
  <button type="button" on:click={nextSlide}>Next</button>
</div>

Supports custom thumbnail

🚀See example with custom thumbnail


<script>
  let SwipeComp;

  function changeSlide(i){
    SwipeComp.goTo(i)
  }

</script>
<div class="swipe-holder">
  <Swipe bind:this={SwipeComp}>
    <SwipeItem>....</SwipeItem>
    ...
  </Swipe>
</div>

Default css custom properties


  :root{
    --sv-swipe-panel-height: inherit;
    --sv-swipe-panel-width: inherit;
    --sv-swipe-panel-wrapper-index: 2;
    --sv-swipe-indicator-active-color: grey;
    --sv-swipe-handler-top: 0px;
  }

Props

NameTypeDescriptionRequiredDefault
is_verticalBooleanallow swipe items verticallyNofalse
autoplayBooleanPlay items as slideNofalse
showIndicatorsBooleanappears clickable circle indicators bottom center of itemNofalse
transitionDurationNumberstaying duration of per slide/swipe itemNo200 *ms
delayNumbertransition delayNo1000 *ms
defaultIndexNumberinitial item indexNo0
allow_dynamic_heightBooleanallow firing height change event on:swipe_item_height_changeNofalse
allow_infinite_swipeBooleanallow swipe items infinitelyNofalse
activeBooleanfire height change eventNofalse

Events

NameDescriptionComponent
on:changefires on swipe-end with with holding detail active_item, swipe_direction and active_elementSwipe
on:swipe_item_height_changefires on swipe-end with holding child's current height detailSwipeItem

NPM Statistics

Download stats for this NPM package

NPM

Scan qr code to see url in your device

demo-url