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

108 lines (94 loc) 2.31 kB
import { define } from '../utils/object' export default function (Glide, Components, Events) { const Sizes = { /** * Setups dimentions of slides. * * @return {Void} */ setupSlides () { let slides = Components.Html.slides for (let i = 0; i < slides.length; i++) { slides[i].style.width = `${this.slideWidth}px` } }, /** * Setups dimentions of slides wrapper. * * @return {Void} */ setupWrapper (dimention) { Components.Html.wrapper.style.width = `${this.wrapperSize}px` }, /** * Removes applied styles from HTML elements. * * @returns {Void} */ remove () { let slides = Components.Html.slides for (let i = 0; i < slides.length; i++) { slides[i].style.width = '' } Components.Html.wrapper.style.width = '' } } define(Sizes, 'length', { /** * Gets count number of the slides. * * @return {Number} */ get () { return Components.Html.slides.length } }) define(Sizes, 'width', { /** * Gets width value of the glide. * * @return {Number} */ get () { return Components.Html.root.offsetWidth } }) define(Sizes, 'wrapperSize', { /** * Gets size of the slides wrapper. * * @return {Number} */ get () { return (Sizes.slideWidth * Sizes.length) + Components.Gaps.grow + Components.Clones.grow } }) define(Sizes, 'slideWidth', { /** * Gets width value of the single slide. * * @return {Number} */ get () { return (Sizes.width / Glide.settings.perView) - Components.Peek.reductor - Components.Gaps.reductor } }) /** * Apply calculated glide's dimensions: * - before building, so other dimentions (e.g. translate) will be calculated propertly * - when resizing window to recalculate sildes dimensions * - on updating via API, to calculate dimensions based on new options */ Events.on(['build.before', 'resize', 'update'], () => { Sizes.setupSlides() Sizes.setupWrapper() }) /** * Remove calculated glide's dimensions: * - on destoting to bring markup to its inital state */ Events.on('destroy', () => { Sizes.remove() }) return Sizes }