UNPKG

swiper

Version:

Most modern mobile touch slider and framework with hardware accelerated transitions

92 lines (83 loc) 2.91 kB
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } import { getWindow } from 'ssr-window'; import { bindModuleMethods } from '../../utils/utils'; var Observer = { attach: function attach(target, options) { if (options === void 0) { options = {}; } var window = getWindow(); var swiper = this; var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver; var observer = new ObserverFunc(function (mutations) { // The observerUpdate event should only be triggered // once despite the number of mutations. Additional // triggers are redundant and are very costly if (mutations.length === 1) { swiper.emit('observerUpdate', mutations[0]); return; } var observerUpdate = function observerUpdate() { swiper.emit('observerUpdate', mutations[0]); }; if (window.requestAnimationFrame) { window.requestAnimationFrame(observerUpdate); } else { window.setTimeout(observerUpdate, 0); } }); observer.observe(target, { attributes: typeof options.attributes === 'undefined' ? true : options.attributes, childList: typeof options.childList === 'undefined' ? true : options.childList, characterData: typeof options.characterData === 'undefined' ? true : options.characterData }); swiper.observer.observers.push(observer); }, init: function init() { var swiper = this; if (!swiper.support.observer || !swiper.params.observer) return; if (swiper.params.observeParents) { var containerParents = swiper.$el.parents(); for (var i = 0; i < containerParents.length; i += 1) { swiper.observer.attach(containerParents[i]); } } // Observe container swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren }); // Observe wrapper swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false }); }, destroy: function destroy() { var swiper = this; swiper.observer.observers.forEach(function (observer) { observer.disconnect(); }); swiper.observer.observers = []; } }; export default { name: 'observer', params: { observer: false, observeParents: false, observeSlideChildren: false }, create: function create() { var swiper = this; bindModuleMethods(swiper, { observer: _extends(_extends({}, Observer), {}, { observers: [] }) }); }, on: { init: function init(swiper) { swiper.observer.init(); }, destroy: function destroy(swiper) { swiper.observer.destroy(); } } };