@ulu/frontend
Version:
A versatile SCSS and JavaScript component library offering configurable, accessible components and flexible integration into any project, with SCSS modules suitable for modern JS frameworks.
50 lines (45 loc) • 1.37 kB
JavaScript
/**
* @module ui/scroll-slider
*/
import { ComponentInitializer } from "../utils/system.js";
import { OverflowScroller } from "./overflow-scroller.js";
import { createPager } from "./overflow-scroller-pager.js";
/**
* Scroll Slider Component Initializer
*/
export const initializer = new ComponentInitializer({
type: "scroll-slider",
baseAttribute: "data-ulu-scroll-slider"
});
const attrSelectorTrack = initializer.attributeSelector("track");
const attrSelectorControls = initializer.attributeSelector("control-context");
const instances = [];
const defaults = {
amount: createPager()
};
/**
* Initialize everything in document
* - This will only initialize elements once, it is safe to call on page changes
*/
export function init() {
initializer.init({
withData: true,
events: ["pageModified"],
setup({ element, data, initialize }) {
setupSlider(element, data);
initialize();
}
});
}
/**
* Setup instance of scroll slider based on data-attributes
* @param {Node} container The scroll slider container
*/
function setupSlider(container, userOptions) {
const config = Object.assign({}, defaults, userOptions);
const elements = {
track: container.querySelector(attrSelectorTrack),
controls: container.querySelector(attrSelectorControls)
};
instances.push(new OverflowScroller(elements, config));
}