Skip to content

modbender/nuxt-keen-slider

Repository files navigation

Nuxt Keen Slider

Nuxt Keen Slider - NPM Package Nuxt Keen Slider - NPM Package Downloads Nuxt Keen Slider License Nuxt Keen Slider - Nuxt

Easy, lightweight slider or carousel creations.

Nuxt Keen Slider - Preview 1 Nuxt Keen Slider - Preview 2


Features

  • Great Performance: Best Lighthouse Perfomance, Lowest CLS
  • Lightweight: No dependencies, Fast loading
  • 📱Mobile First: Supports multi touch and is fully responsive
  • ⚔️Compatible: Works in all common browsers, including >= IE 10 and React Native
  • 🗼Extensible: Rich but simple API

Quick Setup

  1. Add nuxt-keen-slider dependency to your project

    # Using pnpm
    pnpm add -D nuxt-keen-slider
    
    # Using yarn
    yarn add --dev nuxt-keen-slider
    
    # Using npm
    npm install --save-dev nuxt-keen-slider
  2. Add nuxt-keen-slider to the modules section of nuxt.config.ts

    export default defineNuxtConfig({
      modules: [
        'nuxt-keen-slider'
      ]
    })
  3. Create a component with name of your wish, ex. KeenSlider.vue

    <template>
      <div ref="container" class="keen-slider">
        <div class="keen-slider__slide number-slide1">1</div>
        <div class="keen-slider__slide number-slide2">2</div>
        <div class="keen-slider__slide number-slide3">3</div>
        <div class="keen-slider__slide number-slide4">4</div>
        <div class="keen-slider__slide number-slide5">5</div>
        <div class="keen-slider__slide number-slide6">6</div>
      </div>
    </template>
    
    <script setup>
    const [container, slider] = useKeenSlider({
      loop: true,
      mode: "free",
      slides: {
        perView: 3,
        spacing: 15,
      },
    });
    </script>
    
    <style>
    [class^="number-slide"],
    [class*=" number-slide"] {
      background: grey;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 50px;
      color: #fff;
      font-weight: 500;
      height: 300px;
      max-height: 100vh;
    }
    
    .number-slide1 {
      background: rgb(64, 175, 255);
      background: linear-gradient(
        128deg,
        rgba(64, 175, 255, 1) 0%,
        rgba(63, 97, 255, 1) 100%
      );
    }
    
    .number-slide2 {
      background: rgb(255, 75, 64);
      background: linear-gradient(
        128deg,
        rgba(255, 154, 63, 1) 0%,
        rgba(255, 75, 64, 1) 100%
      );
    }
    
    .number-slide3 {
      background: rgb(182, 255, 64);
      background: linear-gradient(
        128deg,
        rgba(182, 255, 64, 1) 0%,
        rgba(63, 255, 71, 1) 100%
      );
      background: linear-gradient(
        128deg,
        rgba(189, 255, 83, 1) 0%,
        rgba(43, 250, 82, 1) 100%
      );
    }
    
    .number-slide4 {
      background: rgb(64, 255, 242);
      background: linear-gradient(
        128deg,
        rgba(64, 255, 242, 1) 0%,
        rgba(63, 188, 255, 1) 100%
      );
    }
    
    .number-slide5 {
      background: rgb(255, 64, 156);
      background: linear-gradient(
        128deg,
        rgba(255, 64, 156, 1) 0%,
        rgba(255, 63, 63, 1) 100%
      );
    }
    .number-slide6 {
      background: rgb(64, 76, 255);
      background: linear-gradient(
        128deg,
        rgba(64, 76, 255, 1) 0%,
        rgba(174, 63, 255, 1) 100%
      );
    }
    </style>
  4. Add the component anywhere you want

    <template>
      <KeenSlider />
    </template>

That's it! You can now use Nuxt Keen Slider in your Nuxt app ✨


[!NOTE] OPTIONAL I have seen absolute 0 CLS, maximum performance by wrapping the Slider component with ClientOnly.
Seems to stop working if the component is created with .client.vue extension.
You could try the same if you are having Lighthouse/PageSpeed score issues and you are aiming for maximum performance.

Remember, this could not work depending on use case.

<template>
  <ClientOnly>
    <KeenSlider />
  </ClientOnly>
</template>

Development

# Install dependencies
pnpm install

# Generate type stubs
pnpm run dev:prepare

# Develop with the playground
pnpm run dev

# Build the playground
pnpm run dev:build

# Run ESLint
pnpm run lint

# Run Vitest
pnpm run test
pnpm run test:watch

# Release new version
npm run release