UNPKG

@glidejs/glide

Version:

Glide.js is a dependency-free JavaScript ES6 slider and carousel. It’s lightweight, flexible and fast. Designed to slide. No less, no more

91 lines (76 loc) 1.97 kB
import { siblings } from '../utils/dom' export default function (Glide, Components, Events) { const Build = { /** * Init glide building. Adds classes, sets * dimensions and setups initial state. * * @return {Void} */ mount () { Events.emit('build.before') this.typeClass() this.activeClass() Events.emit('build.after') }, /** * Adds `type` class to the glide element. * * @return {Void} */ typeClass () { Components.Html.root.classList.add(Glide.settings.classes[Glide.settings.type]) }, /** * Sets active class to current slide. * * @return {Void} */ activeClass () { let classes = Glide.settings.classes let slide = Components.Html.slides[Glide.index] if (slide) { slide.classList.add(classes.activeSlide) siblings(slide).forEach((sibling) => { sibling.classList.remove(classes.activeSlide) }) } }, /** * Removes HTML classes applied at building. * * @return {Void} */ removeClasses () { let classes = Glide.settings.classes Components.Html.root.classList.remove(classes[Glide.settings.type]) Components.Html.slides.forEach((sibling) => { sibling.classList.remove(classes.activeSlide) }) } } /** * Clear building classes: * - on destroying to bring HTML to its initial state * - on updating to remove classes before remounting component */ Events.on(['destroy', 'update'], () => { Build.removeClasses() }) /** * Remount component: * - on resizing of the window to calculate new dimentions * - on updating settings via API */ Events.on(['resize', 'update'], () => { Build.mount() }) /** * Swap active class of current slide: * - after each move to the new index */ Events.on('move.after', () => { Build.activeClass() }) return Build }