UNPKG

swiper

Version:

Most modern mobile touch slider and framework with hardware accelerated transitions

110 lines (102 loc) 3.81 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, getDocument } from 'ssr-window'; import $ from '../../utils/dom'; import { bindModuleMethods } from '../../utils/utils'; var HashNavigation = { onHashCange: function onHashCange() { var swiper = this; var document = getDocument(); swiper.emit('hashChange'); var newHash = document.location.hash.replace('#', ''); var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash'); if (newHash !== activeSlideHash) { var newIndex = swiper.$wrapperEl.children("." + swiper.params.slideClass + "[data-hash=\"" + newHash + "\"]").index(); if (typeof newIndex === 'undefined') return; swiper.slideTo(newIndex); } }, setHash: function setHash() { var swiper = this; var window = getWindow(); var document = getDocument(); if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return; if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) { window.history.replaceState(null, null, "#" + swiper.slides.eq(swiper.activeIndex).attr('data-hash') || ''); swiper.emit('hashSet'); } else { var slide = swiper.slides.eq(swiper.activeIndex); var hash = slide.attr('data-hash') || slide.attr('data-history'); document.location.hash = hash || ''; swiper.emit('hashSet'); } }, init: function init() { var swiper = this; var document = getDocument(); var window = getWindow(); if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return; swiper.hashNavigation.initialized = true; var hash = document.location.hash.replace('#', ''); if (hash) { var speed = 0; for (var i = 0, length = swiper.slides.length; i < length; i += 1) { var slide = swiper.slides.eq(i); var slideHash = slide.attr('data-hash') || slide.attr('data-history'); if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) { var index = slide.index(); swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true); } } } if (swiper.params.hashNavigation.watchState) { $(window).on('hashchange', swiper.hashNavigation.onHashCange); } }, destroy: function destroy() { var swiper = this; var window = getWindow(); if (swiper.params.hashNavigation.watchState) { $(window).off('hashchange', swiper.hashNavigation.onHashCange); } } }; export default { name: 'hash-navigation', params: { hashNavigation: { enabled: false, replaceState: false, watchState: false } }, create: function create() { var swiper = this; bindModuleMethods(swiper, { hashNavigation: _extends({ initialized: false }, HashNavigation) }); }, on: { init: function init(swiper) { if (swiper.params.hashNavigation.enabled) { swiper.hashNavigation.init(); } }, destroy: function destroy(swiper) { if (swiper.params.hashNavigation.enabled) { swiper.hashNavigation.destroy(); } }, transitionEnd: function transitionEnd(swiper) { if (swiper.hashNavigation.initialized) { swiper.hashNavigation.setHash(); } }, slideChange: function slideChange(swiper) { if (swiper.hashNavigation.initialized && swiper.params.cssMode) { swiper.hashNavigation.setHash(); } } } };