import { document } from 'ssr-window';
|
import Device from '../../../utils/device';
|
import Support from '../../../utils/support';
|
|
import onTouchStart from './onTouchStart';
|
import onTouchMove from './onTouchMove';
|
import onTouchEnd from './onTouchEnd';
|
import onResize from './onResize';
|
import onClick from './onClick';
|
import onScroll from './onScroll';
|
|
let dummyEventAttached = false;
|
function dummyEventListener() {}
|
|
function attachEvents() {
|
const swiper = this;
|
const {
|
params, touchEvents, el, wrapperEl,
|
} = swiper;
|
|
swiper.onTouchStart = onTouchStart.bind(swiper);
|
swiper.onTouchMove = onTouchMove.bind(swiper);
|
swiper.onTouchEnd = onTouchEnd.bind(swiper);
|
if (params.cssMode) {
|
swiper.onScroll = onScroll.bind(swiper);
|
}
|
|
swiper.onClick = onClick.bind(swiper);
|
|
const capture = !!params.nested;
|
|
// Touch Events
|
if (!Support.touch && Support.pointerEvents) {
|
el.addEventListener(touchEvents.start, swiper.onTouchStart, false);
|
document.addEventListener(touchEvents.move, swiper.onTouchMove, capture);
|
document.addEventListener(touchEvents.end, swiper.onTouchEnd, false);
|
} else {
|
if (Support.touch) {
|
const passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
|
el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
|
el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture } : capture);
|
el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
|
if (touchEvents.cancel) {
|
el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
|
}
|
if (!dummyEventAttached) {
|
document.addEventListener('touchstart', dummyEventListener);
|
dummyEventAttached = true;
|
}
|
}
|
if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
|
el.addEventListener('mousedown', swiper.onTouchStart, false);
|
document.addEventListener('mousemove', swiper.onTouchMove, capture);
|
document.addEventListener('mouseup', swiper.onTouchEnd, false);
|
}
|
}
|
// Prevent Links Clicks
|
if (params.preventClicks || params.preventClicksPropagation) {
|
el.addEventListener('click', swiper.onClick, true);
|
}
|
if (params.cssMode) {
|
wrapperEl.addEventListener('scroll', swiper.onScroll);
|
}
|
|
// Resize handler
|
if (params.updateOnWindowResize) {
|
swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);
|
} else {
|
swiper.on('observerUpdate', onResize, true);
|
}
|
}
|
|
function detachEvents() {
|
const swiper = this;
|
|
const {
|
params, touchEvents, el, wrapperEl,
|
} = swiper;
|
|
const capture = !!params.nested;
|
|
// Touch Events
|
if (!Support.touch && Support.pointerEvents) {
|
el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);
|
document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
|
document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);
|
} else {
|
if (Support.touch) {
|
const passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
|
el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
|
el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
|
el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
|
if (touchEvents.cancel) {
|
el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
|
}
|
}
|
if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
|
el.removeEventListener('mousedown', swiper.onTouchStart, false);
|
document.removeEventListener('mousemove', swiper.onTouchMove, capture);
|
document.removeEventListener('mouseup', swiper.onTouchEnd, false);
|
}
|
}
|
// Prevent Links Clicks
|
if (params.preventClicks || params.preventClicksPropagation) {
|
el.removeEventListener('click', swiper.onClick, true);
|
}
|
|
if (params.cssMode) {
|
wrapperEl.removeEventListener('scroll', swiper.onScroll);
|
}
|
|
// Resize handler
|
swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);
|
}
|
|
export default {
|
attachEvents,
|
detachEvents,
|
};
|