UNPKG

swiper

Version:

Most modern mobile touch slider and framework with hardware accelerated transitions

646 lines (514 loc) 18.9 kB
"use strict"; exports.__esModule = true; exports.default = void 0; var _dom = _interopRequireDefault(require("../../utils/dom")); var _utils = require("../../utils/utils"); var _getSupport = require("../../utils/get-support"); var _getDevice = require("../../utils/get-device"); var _getBrowser = require("../../utils/get-browser"); var _resize = _interopRequireDefault(require("../../modules/resize/resize")); var _observer = _interopRequireDefault(require("../../modules/observer/observer")); var _modular = _interopRequireDefault(require("./modular")); var _eventsEmitter = _interopRequireDefault(require("./events-emitter")); var _index = _interopRequireDefault(require("./update/index")); var _index2 = _interopRequireDefault(require("./translate/index")); var _index3 = _interopRequireDefault(require("./transition/index")); var _index4 = _interopRequireDefault(require("./slide/index")); var _index5 = _interopRequireDefault(require("./loop/index")); var _index6 = _interopRequireDefault(require("./grab-cursor/index")); var _index7 = _interopRequireDefault(require("./manipulation/index")); var _index8 = _interopRequireDefault(require("./events/index")); var _index9 = _interopRequireDefault(require("./breakpoints/index")); var _index10 = _interopRequireDefault(require("./classes/index")); var _index11 = _interopRequireDefault(require("./images/index")); var _index12 = _interopRequireDefault(require("./check-overflow/index")); var _defaults = _interopRequireDefault(require("./defaults")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var prototypes = { modular: _modular.default, eventsEmitter: _eventsEmitter.default, update: _index.default, translate: _index2.default, transition: _index3.default, slide: _index4.default, loop: _index5.default, grabCursor: _index6.default, manipulation: _index7.default, events: _index8.default, breakpoints: _index9.default, checkOverflow: _index12.default, classes: _index10.default, images: _index11.default }; var extendedDefaults = {}; var Swiper = /*#__PURE__*/function () { function Swiper() { var el; var params; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') { params = args[0]; } else { el = args[0]; params = args[1]; } if (!params) params = {}; params = (0, _utils.extend)({}, params); if (el && !params.el) params.el = el; if (params.el && (0, _dom.default)(params.el).length > 1) { var swipers = []; (0, _dom.default)(params.el).each(function (containerEl) { var newParams = (0, _utils.extend)({}, params, { el: containerEl }); swipers.push(new Swiper(newParams)); }); return swipers; } // Swiper Instance var swiper = this; swiper.__swiper__ = true; swiper.support = (0, _getSupport.getSupport)(); swiper.device = (0, _getDevice.getDevice)({ userAgent: params.userAgent }); swiper.browser = (0, _getBrowser.getBrowser)(); swiper.eventsListeners = {}; swiper.eventsAnyListeners = []; if (typeof swiper.modules === 'undefined') { swiper.modules = {}; } Object.keys(swiper.modules).forEach(function (moduleName) { var module = swiper.modules[moduleName]; if (module.params) { var moduleParamName = Object.keys(module.params)[0]; var moduleParams = module.params[moduleParamName]; if (typeof moduleParams !== 'object' || moduleParams === null) return; if (!(moduleParamName in params && 'enabled' in moduleParams)) return; if (params[moduleParamName] === true) { params[moduleParamName] = { enabled: true }; } if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) { params[moduleParamName].enabled = true; } if (!params[moduleParamName]) params[moduleParamName] = { enabled: false }; } }); // Extend defaults with modules params var swiperParams = (0, _utils.extend)({}, _defaults.default); swiper.useParams(swiperParams); // Extend defaults with passed params swiper.params = (0, _utils.extend)({}, swiperParams, extendedDefaults, params); swiper.originalParams = (0, _utils.extend)({}, swiper.params); swiper.passedParams = (0, _utils.extend)({}, params); // add event listeners if (swiper.params && swiper.params.on) { Object.keys(swiper.params.on).forEach(function (eventName) { swiper.on(eventName, swiper.params.on[eventName]); }); } if (swiper.params && swiper.params.onAny) { swiper.onAny(swiper.params.onAny); } // Save Dom lib swiper.$ = _dom.default; // Extend Swiper (0, _utils.extend)(swiper, { enabled: swiper.params.enabled, el: el, // Classes classNames: [], // Slides slides: (0, _dom.default)(), slidesGrid: [], snapGrid: [], slidesSizesGrid: [], // isDirection isHorizontal: function isHorizontal() { return swiper.params.direction === 'horizontal'; }, isVertical: function isVertical() { return swiper.params.direction === 'vertical'; }, // Indexes activeIndex: 0, realIndex: 0, // isBeginning: true, isEnd: false, // Props translate: 0, previousTranslate: 0, progress: 0, velocity: 0, animating: false, // Locks allowSlideNext: swiper.params.allowSlideNext, allowSlidePrev: swiper.params.allowSlidePrev, // Touch Events touchEvents: function touchEvents() { var touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel']; var desktop = ['mousedown', 'mousemove', 'mouseup']; if (swiper.support.pointerEvents) { desktop = ['pointerdown', 'pointermove', 'pointerup']; } swiper.touchEventsTouch = { start: touch[0], move: touch[1], end: touch[2], cancel: touch[3] }; swiper.touchEventsDesktop = { start: desktop[0], move: desktop[1], end: desktop[2] }; return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop; }(), touchEventsData: { isTouched: undefined, isMoved: undefined, allowTouchCallbacks: undefined, touchStartTime: undefined, isScrolling: undefined, currentTranslate: undefined, startTranslate: undefined, allowThresholdMove: undefined, // Form elements to match formElements: 'input, select, option, textarea, button, video, label', // Last click time lastClickTime: (0, _utils.now)(), clickTimeout: undefined, // Velocities velocities: [], allowMomentumBounce: undefined, isTouchEvent: undefined, startMoving: undefined }, // Clicks allowClick: true, // Touches allowTouchMove: swiper.params.allowTouchMove, touches: { startX: 0, startY: 0, currentX: 0, currentY: 0, diff: 0 }, // Images imagesToLoad: [], imagesLoaded: 0 }); // Install Modules swiper.useModules(); swiper.emit('_swiper'); // Init if (swiper.params.init) { swiper.init(); } // Return app instance return swiper; } var _proto = Swiper.prototype; _proto.enable = function enable() { var swiper = this; if (swiper.enabled) return; swiper.enabled = true; if (swiper.params.grabCursor) { swiper.setGrabCursor(); } swiper.emit('enable'); }; _proto.disable = function disable() { var swiper = this; if (!swiper.enabled) return; swiper.enabled = false; if (swiper.params.grabCursor) { swiper.unsetGrabCursor(); } swiper.emit('disable'); }; _proto.setProgress = function setProgress(progress, speed) { var swiper = this; progress = Math.min(Math.max(progress, 0), 1); var min = swiper.minTranslate(); var max = swiper.maxTranslate(); var current = (max - min) * progress + min; swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed); swiper.updateActiveIndex(); swiper.updateSlidesClasses(); }; _proto.emitContainerClasses = function emitContainerClasses() { var swiper = this; if (!swiper.params._emitClasses || !swiper.el) return; var classes = swiper.el.className.split(' ').filter(function (className) { return className.indexOf('swiper-container') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0; }); swiper.emit('_containerClasses', classes.join(' ')); }; _proto.getSlideClasses = function getSlideClasses(slideEl) { var swiper = this; return slideEl.className.split(' ').filter(function (className) { return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0; }).join(' '); }; _proto.emitSlidesClasses = function emitSlidesClasses() { var swiper = this; if (!swiper.params._emitClasses || !swiper.el) return; var updates = []; swiper.slides.each(function (slideEl) { var classNames = swiper.getSlideClasses(slideEl); updates.push({ slideEl: slideEl, classNames: classNames }); swiper.emit('_slideClass', slideEl, classNames); }); swiper.emit('_slideClasses', updates); }; _proto.slidesPerViewDynamic = function slidesPerViewDynamic() { var swiper = this; var params = swiper.params, slides = swiper.slides, slidesGrid = swiper.slidesGrid, swiperSize = swiper.size, activeIndex = swiper.activeIndex; var spv = 1; if (params.centeredSlides) { var slideSize = slides[activeIndex].swiperSlideSize; var breakLoop; for (var i = activeIndex + 1; i < slides.length; i += 1) { if (slides[i] && !breakLoop) { slideSize += slides[i].swiperSlideSize; spv += 1; if (slideSize > swiperSize) breakLoop = true; } } for (var _i = activeIndex - 1; _i >= 0; _i -= 1) { if (slides[_i] && !breakLoop) { slideSize += slides[_i].swiperSlideSize; spv += 1; if (slideSize > swiperSize) breakLoop = true; } } } else { for (var _i2 = activeIndex + 1; _i2 < slides.length; _i2 += 1) { if (slidesGrid[_i2] - slidesGrid[activeIndex] < swiperSize) { spv += 1; } } } return spv; }; _proto.update = function update() { var swiper = this; if (!swiper || swiper.destroyed) return; var snapGrid = swiper.snapGrid, params = swiper.params; // Breakpoints if (params.breakpoints) { swiper.setBreakpoint(); } swiper.updateSize(); swiper.updateSlides(); swiper.updateProgress(); swiper.updateSlidesClasses(); function setTranslate() { var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate; var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate()); swiper.setTranslate(newTranslate); swiper.updateActiveIndex(); swiper.updateSlidesClasses(); } var translated; if (swiper.params.freeMode) { setTranslate(); if (swiper.params.autoHeight) { swiper.updateAutoHeight(); } } else { if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) { translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true); } else { translated = swiper.slideTo(swiper.activeIndex, 0, false, true); } if (!translated) { setTranslate(); } } if (params.watchOverflow && snapGrid !== swiper.snapGrid) { swiper.checkOverflow(); } swiper.emit('update'); }; _proto.changeDirection = function changeDirection(newDirection, needUpdate) { if (needUpdate === void 0) { needUpdate = true; } var swiper = this; var currentDirection = swiper.params.direction; if (!newDirection) { // eslint-disable-next-line newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal'; } if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') { return swiper; } swiper.$el.removeClass("" + swiper.params.containerModifierClass + currentDirection).addClass("" + swiper.params.containerModifierClass + newDirection); swiper.emitContainerClasses(); swiper.params.direction = newDirection; swiper.slides.each(function (slideEl) { if (newDirection === 'vertical') { slideEl.style.width = ''; } else { slideEl.style.height = ''; } }); swiper.emit('changeDirection'); if (needUpdate) swiper.update(); return swiper; }; _proto.mount = function mount(el) { var swiper = this; if (swiper.mounted) return true; // Find el var $el = (0, _dom.default)(el || swiper.params.el); el = $el[0]; if (!el) { return false; } el.swiper = swiper; // Find Wrapper var $wrapperEl; if (el && el.shadowRoot && el.shadowRoot.querySelector) { $wrapperEl = (0, _dom.default)(el.shadowRoot.querySelector("." + swiper.params.wrapperClass)); // Children needs to return slot items $wrapperEl.children = function (options) { return $el.children(options); }; } else { $wrapperEl = $el.children("." + swiper.params.wrapperClass); } (0, _utils.extend)(swiper, { $el: $el, el: el, $wrapperEl: $wrapperEl, wrapperEl: $wrapperEl[0], mounted: true, // RTL rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl', rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'), wrongRTL: $wrapperEl.css('display') === '-webkit-box' }); return true; }; _proto.init = function init(el) { var swiper = this; if (swiper.initialized) return swiper; var mounted = swiper.mount(el); if (mounted === false) return swiper; swiper.emit('beforeInit'); // Set breakpoint if (swiper.params.breakpoints) { swiper.setBreakpoint(); } // Add Classes swiper.addClasses(); // Create loop if (swiper.params.loop) { swiper.loopCreate(); } // Update size swiper.updateSize(); // Update slides swiper.updateSlides(); if (swiper.params.watchOverflow) { swiper.checkOverflow(); } // Set Grab Cursor if (swiper.params.grabCursor && swiper.enabled) { swiper.setGrabCursor(); } if (swiper.params.preloadImages) { swiper.preloadImages(); } // Slide To Initial Slide if (swiper.params.loop) { swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true); } else { swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true); } // Attach events swiper.attachEvents(); // Init Flag swiper.initialized = true; // Emit swiper.emit('init'); swiper.emit('afterInit'); return swiper; }; _proto.destroy = function destroy(deleteInstance, cleanStyles) { if (deleteInstance === void 0) { deleteInstance = true; } if (cleanStyles === void 0) { cleanStyles = true; } var swiper = this; var params = swiper.params, $el = swiper.$el, $wrapperEl = swiper.$wrapperEl, slides = swiper.slides; if (typeof swiper.params === 'undefined' || swiper.destroyed) { return null; } swiper.emit('beforeDestroy'); // Init Flag swiper.initialized = false; // Detach events swiper.detachEvents(); // Destroy loop if (params.loop) { swiper.loopDestroy(); } // Cleanup styles if (cleanStyles) { swiper.removeClasses(); $el.removeAttr('style'); $wrapperEl.removeAttr('style'); if (slides && slides.length) { slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index'); } } swiper.emit('destroy'); // Detach emitter events Object.keys(swiper.eventsListeners).forEach(function (eventName) { swiper.off(eventName); }); if (deleteInstance !== false) { swiper.$el[0].swiper = null; (0, _utils.deleteProps)(swiper); } swiper.destroyed = true; return null; }; Swiper.extendDefaults = function extendDefaults(newDefaults) { (0, _utils.extend)(extendedDefaults, newDefaults); }; Swiper.installModule = function installModule(module) { if (!Swiper.prototype.modules) Swiper.prototype.modules = {}; var name = module.name || Object.keys(Swiper.prototype.modules).length + "_" + (0, _utils.now)(); Swiper.prototype.modules[name] = module; }; Swiper.use = function use(module) { if (Array.isArray(module)) { module.forEach(function (m) { return Swiper.installModule(m); }); return Swiper; } Swiper.installModule(module); return Swiper; }; _createClass(Swiper, null, [{ key: "extendedDefaults", get: function get() { return extendedDefaults; } }, { key: "defaults", get: function get() { return _defaults.default; } }]); return Swiper; }(); Object.keys(prototypes).forEach(function (prototypeGroup) { Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) { Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod]; }); }); Swiper.use([_resize.default, _observer.default]); var _default = Swiper; exports.default = _default;