drupal/pm_carousel_js

There is no license information available for the latest version (0.1.5) of this package.

Mirror of the pm-carousel javascript library tagged as a Drupal library (patched).

0.1.5 2024-12-18 15:00 UTC

This package is not auto-updated.

Last update: 2025-01-08 05:57:35 UTC


README

Accessible carousel plugin written in JS with no dependencies.

Examples here: https://lordfpx.github.io/pm-carousel/

Features

  • Fully accessible (if you respect HTML order)
  • Keyboard navigation (keyboard arrows, Home and End keys)
  • Touch swipe
  • Responsive carousel settings
  • No dependencies
  • Vanilla JS
  • Pretty small (about 3.5Kb gzip)

HTML markup

The HTML order is very important to be fully accessible. You will notice strings like {text} or {nbr}. They are mandatory and will be replaced by the script.

Full HTML example to use pm-carousel:

<div data-pm-carousel>
	<button
		type="button"
		data-pm-carousel-playstop="Stop the carousel|Play the carousel"
		hidden
	>
		{text}
	</button>

	<ul data-pm-carousel-paging hidden>
		<li>
			<button type="button">Slide {nbr}</button>
		</li>
	</ul>

	<div data-pm-carousel-wrapper>
		<div data-pm-carousel-overflow>
			<div data-pm-carousel-item>...</div>
		</div>
	</div>

	<button
		data-pm-carousel-prev="Previous item|Go back to last item"
		type="button"
		hidden
	>
		{text}
	</button>
	<button
		data-pm-carousel-next="Next item|Go back to first item"
		type="button"
		hidden
	>
		{text}
	</button>
</div>

Play and Stop button (optional)

This is the most basic button example. You can add any HTML markup that will not break this base. {text} will be replaced by the right value defined inside the data-pm-carousel-playstop attribute.

<button
	type="button"
	data-pm-carousel-playstop="Stop the carousel|Play the carousel"
	hidden
>
	{text}
</button>

Paging (optional)

The HTML inside the button can be freely personalized. {nbr} is mandatory and will be replaced by the slide number.

<ul data-pm-carousel-paging hidden>
	<li>
		<button type="button">Slide {nbr}</button>
	</li>
</ul>

The slides

<div data-pm-carousel-wrapper>
	<div data-pm-carousel-overflow>
		<div data-pm-carousel-item>...</div>
		<div data-pm-carousel-item>...</div>
		<div data-pm-carousel-item>...</div>
	</div>
</div>

Previous and next buttons

This is the most basic button example. You can add any HTML markup that will not break this base.

Labels inside data-pm-carousel-prev and data-pm-carousel-next attributes are used to dynamize {text}.

<button
	data-pm-carousel-prev="Previous item|Go back to last item"
	type="button"
	hidden
>
	{text}
</button>

<button
	data-pm-carousel-next="Next item|Go back to first item"
	type="button"
	hidden
>
	{text}
</button>

Settings

Default settings:

{
  loop: true,          // Will loop
  group: 1,            // nbr of slides per page
  spaceAround: 0,      // centered mode with partial view of surrounding slides (express in %)
  noStartSpace: false, // in combinaison with "spaceAround" option, but align left the carousel
  autoplay: 0,         // speed of the autoplay (0 for disabled)
}

Usage

npm i pm-carousel --save

In your script:

import pmCarousel from "pm-carousel"

If you need to load the script directly on your page, or to import it the "old-fashion way" (see https://github.com/umdjs/umd), you can find the umd version inside the dist folder: pm-carousel.umd.js.

Initialize

2 ways to initialize pm-carousel:

  • For all carousels with default options:

    pmCarousel()
    
  • For specified carousels only (with default options):

    const myCarousels = document.querySelectorAll(".my-class")
    
    pmCarousel({}, myCarousels)
    

Both methods can be called again when new carousels are injected into the DOM.

Settings

2 methods:

  • When calling pmCarousel function:

    pmCarousel({
    	default: {
    		group: 1,
    	},
    	responsive: [
    		{
    			minWidth: "800px",
    			group: 4,
    		},
    		{
    			minWidth: "400px",
    			group: 2,
    		},
    		{
    			minWidth: "600px",
    			disable: true,
    		},
    	],
    })
    
  • Inside the data-pm-carousel (the JSON must be valid!):

    <div
    	data-pm-carousel='
        {
          "default": {
            "group": 1
          },
          "responsive": [
            {
              "minWidth": "800px",
              "group": 4
            },
            {
              "minWidth": "400px",
              "group": 2
            },
            {
              "minWidth": "600px",
              "disable": true
            }
          ]
        }'
    >
    	...
    </div>
    

Responsive settings

Have you noticed the reponsive key in the above example? That's the way to make your carousel fully responsive.

You can use whatever unit you want for the minWidth setting.

The disable setting will deactivate the carousel.

API

The instance of pm-carousel can be reached from nodes with data-pm-carousel attribute.

Play and Stop

Only available when Play/PAuse button is present.

const myCarousel = document.querySelector(".class-of-a-carousel");

// Start playing
myCarousels.pmCarousel.play()

// Stop playing
myCarousels.pmCarousel.stop()

// Toggle Play or Stop
myCarousels.pmCarousel.toggleAutoplay()

Change current page

const myCarousel = document.querySelector(".class-of-a-carousel");
myCarousels.pmCarousel.changeActive(2)

Disable and reinit

const myCarousel = document.querySelector(".class-of-a-carousel");

// Disable Carousel
myCarousels.pmCarousel.disable()

// Reinit the Carousel again
myCarousels.pmCarousel.reinit()