UNPKG

es6-simple-carousel

Version:

A light and simple pure javascript carousel.It is usable in the javascript base projects (like reactjs,vuejs,angular)

621 lines (491 loc) 19.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.vdomArrayConvertor = exports.truncResponsiveItemCount = exports.transitionendWatcher = exports.switchInfiniteResponsiveCount = exports.sorter = exports.sliderClientWidth = exports.setTranslate3d = exports.setSliderItemsPosition = exports.setSliderItemsChildWidth = exports.setActiveclassToCurrent = exports.responsiveItemCount = exports.removeClassFromElement = exports.removeAllChildren = exports.prevNone = exports.prevBlock = exports.nextNone = exports.nextBlock = exports.isFloat = exports.infiniteChecker = exports.getTranslate3d = exports.elementCreator = exports.dragChecker = exports.dotActive = exports.directionSetter = exports.childFider = exports.calcSliderGroupCount = exports.calcSliderChildWidth = exports.calcFirstItemPosition = exports.calcFinalWithoutAutoWidth = exports.calcFinalWidthAutoWidth = exports.calcFinalItemPosition = exports.calcCurrentIndex = exports.calcAutoWidthAllSliderItems = exports.arrGenerator = exports.addClassToElement = exports.activeChecker = void 0; function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } /* eslint-disable no-use-before-define */ var addClassToElement = function addClassToElement(params) { var item = params.item, className = params.className; item.classList.add(className); return item; }; exports.addClassToElement = addClassToElement; var removeClassFromElement = function removeClassFromElement(params) { var item = params.item, className = params.className; item.classList.remove(className); return item; }; exports.removeClassFromElement = removeClassFromElement; var isFloat = function isFloat(n) { return Number(n) === n && n % 1 !== 0; }; // eslint-disable-next-line consistent-return exports.isFloat = isFloat; var calcCurrentIndex = function calcCurrentIndex(params) { var sliderItems = params.sliderItems, infinite = params.infinite, perSlide = params.perSlide, slideSize = params.slideSize, sliderMainWidth = params.sliderMainWidth, slidesLength = params.slidesLength, freeScroll = params.freeScroll, autoWidth = params.autoWidth, responsiveItemCount = params.responsiveItemCount; var getIndex = getTranslate3d(sliderItems) / vdomArrayConvertor(sliderItems.children)[0].clientWidth; if (infinite) { if (getIndex >= 0) return Math.round(getIndex); if (getIndex < 0) { return slidesLength + Math.round(getIndex); } } if (Math.abs(getTranslate3d(sliderItems)) <= 1) { return 0; } if (Math.abs(getTranslate3d(sliderItems)) > 0) { var scroll = Math.abs(getTranslate3d(sliderItems)); if (!freeScroll && !autoWidth && !isFloat(responsiveItemCount)) { return Math.round((scroll + sliderMainWidth) / slideSize - perSlide); } return Math.trunc((scroll + sliderMainWidth) / slideSize - perSlide); } }; exports.calcCurrentIndex = calcCurrentIndex; var setActiveclassToCurrent = function setActiveclassToCurrent(params) { var sliderItems = params.sliderItems, perSlide = params.perSlide; var activeIndex = calcCurrentIndex(params); var activeItems = []; _toConsumableArray(Array(perSlide).keys()).forEach(function (item) { return activeItems.push(item + activeIndex); }); vdomArrayConvertor(sliderItems.children).forEach(function (item, itemIndex) { var classItemParams = { item: item, className: "active" }; if (activeItems.includes(itemIndex)) { addClassToElement(classItemParams); } else { removeClassFromElement(classItemParams); } }); }; exports.setActiveclassToCurrent = setActiveclassToCurrent; var sliderClientWidth = function sliderClientWidth(slider) { return slider.clientWidth; }; exports.sliderClientWidth = sliderClientWidth; var truncResponsiveItemCount = function truncResponsiveItemCount(responsive) { return Math.trunc(responsiveItemCount(responsive)); }; exports.truncResponsiveItemCount = truncResponsiveItemCount; var calcFinalItemPosition = function calcFinalItemPosition(params) { var autoWidth = params.autoWidth; if (autoWidth) { return calcFinalWidthAutoWidth(params); } return calcFinalWithoutAutoWidth(params); }; exports.calcFinalItemPosition = calcFinalItemPosition; var calcFinalWidthAutoWidth = function calcFinalWidthAutoWidth(params) { var sliderMainWidth = params.sliderMainWidth, sliderItems = params.sliderItems; return sliderMainWidth - calcAutoWidthAllSliderItems(sliderItems); }; exports.calcFinalWidthAutoWidth = calcFinalWidthAutoWidth; var calcFinalWithoutAutoWidth = function calcFinalWithoutAutoWidth(params) { var slideSize = params.slideSize, sliderMainWidth = params.sliderMainWidth, perSlide = params.perSlide, slidesLength = params.slidesLength, infinite = params.infinite; var infiniteSlideLength = infinite ? slidesLength + perSlide + 1 : slidesLength; var box = perSlide * slideSize; var cost = sliderMainWidth - box; var finalResult = (infiniteSlideLength - perSlide) * slideSize - cost; return -finalResult; }; exports.calcFinalWithoutAutoWidth = calcFinalWithoutAutoWidth; var calcFirstItemPosition = function calcFirstItemPosition(params) { var slideSize = params.slideSize, perSlide = params.perSlide, infinite = params.infinite, autoWidth = params.autoWidth; if (autoWidth) { return 0; } var infiSwitchSlideSize = infinite ? slideSize : 0; return -(infiSwitchSlideSize * (perSlide + 1)); }; exports.calcFirstItemPosition = calcFirstItemPosition; var calcSliderGroupCount = function calcSliderGroupCount(params) { var slidesLength = params.slidesLength, responsive = params.responsive, autoWidth = params.autoWidth, sliderItems = params.sliderItems, sliderMainWidth = params.sliderMainWidth; if (autoWidth) { return Math.ceil(calcAutoWidthAllSliderItems(sliderItems) / sliderMainWidth); } return Math.ceil(slidesLength / truncResponsiveItemCount(responsive)); }; exports.calcSliderGroupCount = calcSliderGroupCount; var calcSliderChildWidth = function calcSliderChildWidth(params) { var responsiveItemCount = params.responsiveItemCount, slider = params.slider; return sliderClientWidth(slider) / responsiveItemCount; }; exports.calcSliderChildWidth = calcSliderChildWidth; var setSliderItemsChildWidth = function setSliderItemsChildWidth(params) { var responsive = params.responsive, slider = params.slider, sliderItems = params.sliderItems, autoWidth = params.autoWidth; vdomArrayConvertor(sliderItems.children).forEach(function (child) { var newChild = child; /* eslint-disable indent */ newChild.style.width = !autoWidth ? "".concat(calcSliderChildWidth({ responsiveItemCount: responsiveItemCount(responsive), slider: slider }), "px") : "auto"; /* eslint-enable indent */ }); }; exports.setSliderItemsChildWidth = setSliderItemsChildWidth; var calcAutoWidthAllSliderItems = function calcAutoWidthAllSliderItems(sliderItems) { var allChildWidth = 0; vdomArrayConvertor(sliderItems.children).forEach(function (child) { allChildWidth += child.offsetWidth; }); return allChildWidth; }; exports.calcAutoWidthAllSliderItems = calcAutoWidthAllSliderItems; var setSliderItemsPosition = function setSliderItemsPosition(params) { var indexItem = params.indexItem, sliderItemWidth = params.sliderItemWidth, sliderItems = params.sliderItems, rtl = params.rtl; var result = directionSetter({ rtl: rtl, input: indexItem * -sliderItemWidth }); sliderItems.style.transform = setTranslate3d(result); return indexItem; }; exports.setSliderItemsPosition = setSliderItemsPosition; var directionSetter = function directionSetter(params) { var rtl = params.rtl, input = params.input; if (rtl) { return -input; } return input; }; exports.directionSetter = directionSetter; var setTranslate3d = function setTranslate3d(getValue) { return "translate3d(".concat(getValue, "px,0px,0px)"); }; exports.setTranslate3d = setTranslate3d; var getTranslate3d = function getTranslate3d(sliderItems) { var values = sliderItems.style.transform.match(/translate3d\((.*)px, (.*)px, (.*)px\)/); if (!values[1] || !values[1].length) { return 0; } return parseFloat(values[1]); }; exports.getTranslate3d = getTranslate3d; var arrGenerator = function arrGenerator(arr, part) { var partTrunc = Math.trunc(part); var round = Math.ceil(arr.length / partTrunc); var counter = 0; var newArry = []; // eslint-disable-next-line no-plusplus for (counter; round > counter; counter++) { newArry[counter] = arr.slice(counter * partTrunc, (counter + 1) * partTrunc); } return newArry; }; exports.arrGenerator = arrGenerator; var sorter = function sorter(a, b) { if (a < b) return -1; // any negative number works if (a > b) return 1; // any positive number works return 0; // equal values MUST yield zero }; exports.sorter = sorter; var responsiveItemCount = function responsiveItemCount(getConfig) { var resp = Object.keys(getConfig).map(function (el) { return parseInt(el, 10); }); var newResp = resp.sort(sorter).filter(function (item) { return item <= document.body.clientWidth; }); return getConfig[parseInt(newResp.pop(), 10)].items; }; exports.responsiveItemCount = responsiveItemCount; var switchInfiniteResponsiveCount = function switchInfiniteResponsiveCount(itemCont, infinite) { return infinite ? itemCont : 0; }; exports.switchInfiniteResponsiveCount = switchInfiniteResponsiveCount; var prevNone = function prevNone(slider) { var childFind = childFider({ wrapper: slider, className: ".prev" }); childFind.style.display = "none"; return childFind; }; exports.prevNone = prevNone; var prevBlock = function prevBlock(slider) { var childFind = childFider({ wrapper: slider, className: ".prev" }); childFind.style.display = "flex"; return childFind; }; exports.prevBlock = prevBlock; var nextNone = function nextNone(slider) { var childFind = childFider({ wrapper: slider, className: ".next" }); childFind.style.display = "none"; return childFind; }; exports.nextNone = nextNone; var nextBlock = function nextBlock(slider) { var childFind = childFider({ wrapper: slider, className: ".next" }); childFind.style.display = "flex"; return childFind; }; exports.nextBlock = nextBlock; var transitionendWatcher = function transitionendWatcher(params) { var responsive = params.responsive, infinite = params.infinite, slider = params.slider, rtl = params.rtl, index = params.index, sliderItems = params.sliderItems, slideSize = params.slideSize, sliderMainWidth = params.sliderMainWidth, setAllowShift = params.setAllowShift, dots = params.dots, slidesLength = params.slidesLength, sliderItemWidth = params.sliderItemWidth, nav = params.nav, setIndex = params.setIndex, autoWidth = params.autoWidth, freeScroll = params.freeScroll, callBack = params.callBack, beforeChange = params.beforeChange; beforeChange(index); var perSlide = truncResponsiveItemCount(responsive); var calcIndex = calcCurrentIndex({ infinite: infinite, perSlide: truncResponsiveItemCount(responsive), slidesLength: slidesLength, slideSize: slideSize, sliderMainWidth: sliderMainWidth, slider: slider, sliderItems: sliderItems, freeScroll: freeScroll, autoWidth: autoWidth }); setIndex(calcIndex); if (infinite && !autoWidth && calcIndex > perSlide + slidesLength && Math.abs(getTranslate3d(sliderItems)) >= (perSlide + 1 + slidesLength) * sliderItemWidth) { return setIndex(setSliderItemsPosition({ indexItem: calcIndex - slidesLength, sliderItemWidth: sliderItemWidth, sliderItems: sliderItems, rtl: rtl })); } // if page-index === 1 && clone === true if (infinite && !autoWidth && calcIndex === perSlide + 1 + slidesLength) { return setIndex(setSliderItemsPosition({ indexItem: perSlide + 1, sliderItemWidth: sliderItemWidth, sliderItems: sliderItems, rtl: rtl })); } // shift to end from start item if (infinite && !autoWidth && (Math.abs(getTranslate3d(sliderItems)) <= 1 || Math.abs(getTranslate3d(sliderItems)) === sliderItemWidth)) { return setIndex(setSliderItemsPosition({ indexItem: slidesLength + calcIndex, sliderItemWidth: sliderItemWidth, sliderItems: sliderItems, rtl: rtl })); } if (!infinite && nav) { var finalPos = { slideSize: slideSize, sliderMainWidth: sliderMainWidth, perSlide: perSlide, slidesLength: slidesLength, infinite: infinite, autoWidth: autoWidth, sliderItems: sliderItems }; var finalConst = Math.abs(Math.trunc(calcFinalItemPosition(finalPos))); var firstConst = Math.abs(Math.trunc(calcFirstItemPosition(finalPos))); var translate3dConst = Math.abs(Math.trunc(getTranslate3d(sliderItems))); var showNext = true; var showPrev = true; if (finalConst <= translate3dConst + 50) { showNext = false; } if (!autoWidth) { if (index === 0) { showPrev = false; } } if (firstConst >= translate3dConst - 50) { showPrev = false; } if (showNext) { nextBlock(slider); } else { nextNone(slider); } if (showPrev) { prevBlock(slider); } else { prevNone(slider); } } // run for set active class removeClassFromElement({ item: sliderItems, className: "shifting" }); if (!autoWidth) { setActiveclassToCurrent({ index: index, sliderItems: sliderItems, perSlide: perSlide, infinite: infinite, slideSize: slideSize, sliderMainWidth: sliderMainWidth, autoWidth: autoWidth, freeScroll: freeScroll }); } setAllowShift(true); if (dots) { dotActive(params); } callBack(calcIndex); return calcIndex; }; exports.transitionendWatcher = transitionendWatcher; var dotActive = function dotActive(params) { var sliderItems = params.sliderItems, slider = params.slider, autoWidth = params.autoWidth, sliderMainWidth = params.sliderMainWidth; var dotsSelector = childFider({ wrapper: slider, className: ".dots" }); var dotConvertor = vdomArrayConvertor(dotsSelector.children); var currentDot = null; if (autoWidth) { var dotIndex = Math.ceil(Math.abs(getTranslate3d(sliderItems)) / sliderMainWidth); currentDot = dotConvertor[dotIndex]; } if (activeChecker(sliderItems) >= 0 && !autoWidth) { currentDot = dotConvertor[activeChecker(sliderItems)]; } if ((autoWidth || activeChecker(sliderItems) >= 0) && currentDot) { dotConvertor.forEach(function (child) { var classItemParams = { item: child, className: "active" }; removeClassFromElement(classItemParams); }); var classItemParams = { item: currentDot, className: "active" }; addClassToElement(classItemParams); } }; exports.dotActive = dotActive; var elementCreator = function elementCreator(params) { var tag = params.tag, wrapper = params.wrapper, className = params.className; removeAllChildren({ wrapper: wrapper, className: className }); var node = document.createElement(tag); node.className = className; wrapper.appendChild(node); return node; }; exports.elementCreator = elementCreator; var childFider = function childFider(params) { var wrapper = params.wrapper, className = params.className; return wrapper.querySelector(className); }; exports.childFider = childFider; var removeAllChildren = function removeAllChildren(params) { var wrapper = params.wrapper, className = params.className; var newClassName = ".".concat(className.split(" ").pop()); var findElements = wrapper.querySelectorAll(newClassName); if (findElements.length) { findElements.forEach(function (child) { child.remove(); }); } return findElements.length; }; exports.removeAllChildren = removeAllChildren; var activeChecker = function activeChecker(sliderItems) { var activeChild = []; vdomArrayConvertor(sliderItems.children).forEach(function (child) { if (child.classList.contains("active")) { activeChild.push(child.dataset.page); } }); return parseInt(activeChild.sort().pop() - 1, 10); }; exports.activeChecker = activeChecker; var vdomArrayConvertor = function vdomArrayConvertor(items) { var isArrayCheck = Array.isArray(items); if (isArrayCheck) return items; return Object.values(items); }; exports.vdomArrayConvertor = vdomArrayConvertor; var infiniteChecker = function infiniteChecker(params) { var infinite = params.infinite, sliderLength = params.sliderLength, perSlide = params.perSlide; if (infinite && sliderLength === perSlide) { return false; } return infinite; }; exports.infiniteChecker = infiniteChecker; var dragChecker = function dragChecker(params) { var drag = params.drag, sliderLength = params.sliderLength, perSlide = params.perSlide; if (drag === false || sliderLength <= perSlide) { return false; } return drag; }; exports.dragChecker = dragChecker;