first commit
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
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 = {
|
||||
onHashChange: function onHashChange() {
|
||||
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.onHashChange);
|
||||
}
|
||||
},
|
||||
destroy: function destroy() {
|
||||
var swiper = this;
|
||||
var window = getWindow();
|
||||
|
||||
if (swiper.params.hashNavigation.watchState) {
|
||||
$(window).off('hashchange', swiper.hashNavigation.onHashChange);
|
||||
}
|
||||
}
|
||||
};
|
||||
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 _freeModeNoMomentumRelease': function transitionEnd_freeModeNoMomentumRelease(swiper) {
|
||||
if (swiper.hashNavigation.initialized) {
|
||||
swiper.hashNavigation.setHash();
|
||||
}
|
||||
},
|
||||
slideChange: function slideChange(swiper) {
|
||||
if (swiper.hashNavigation.initialized && swiper.params.cssMode) {
|
||||
swiper.hashNavigation.setHash();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user