123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- import { g as getDocument, a as getWindow } from '../shared/ssr-window.esm.mjs';
- import { a as elementParents, b as elementOffset } from '../shared/utils.mjs';
- /* eslint-disable consistent-return */
- function Keyboard(_ref) {
- let {
- swiper,
- extendParams,
- on,
- emit
- } = _ref;
- const document = getDocument();
- const window = getWindow();
- swiper.keyboard = {
- enabled: false
- };
- extendParams({
- keyboard: {
- enabled: false,
- onlyInViewport: true,
- pageUpDown: true
- }
- });
- function handle(event) {
- if (!swiper.enabled) return;
- const {
- rtlTranslate: rtl
- } = swiper;
- let e = event;
- if (e.originalEvent) e = e.originalEvent; // jquery fix
- const kc = e.keyCode || e.charCode;
- const pageUpDown = swiper.params.keyboard.pageUpDown;
- const isPageUp = pageUpDown && kc === 33;
- const isPageDown = pageUpDown && kc === 34;
- const isArrowLeft = kc === 37;
- const isArrowRight = kc === 39;
- const isArrowUp = kc === 38;
- const isArrowDown = kc === 40;
- // Directions locks
- if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {
- return false;
- }
- if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {
- return false;
- }
- if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
- return undefined;
- }
- if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {
- return undefined;
- }
- if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {
- let inView = false;
- // Check that swiper should be inside of visible area of window
- if (elementParents(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && elementParents(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) {
- return undefined;
- }
- const el = swiper.el;
- const swiperWidth = el.clientWidth;
- const swiperHeight = el.clientHeight;
- const windowWidth = window.innerWidth;
- const windowHeight = window.innerHeight;
- const swiperOffset = elementOffset(el);
- if (rtl) swiperOffset.left -= el.scrollLeft;
- const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];
- for (let i = 0; i < swiperCoord.length; i += 1) {
- const point = swiperCoord[i];
- if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {
- if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line
- inView = true;
- }
- }
- if (!inView) return undefined;
- }
- if (swiper.isHorizontal()) {
- if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {
- if (e.preventDefault) e.preventDefault();else e.returnValue = false;
- }
- if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();
- if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();
- } else {
- if (isPageUp || isPageDown || isArrowUp || isArrowDown) {
- if (e.preventDefault) e.preventDefault();else e.returnValue = false;
- }
- if (isPageDown || isArrowDown) swiper.slideNext();
- if (isPageUp || isArrowUp) swiper.slidePrev();
- }
- emit('keyPress', kc);
- return undefined;
- }
- function enable() {
- if (swiper.keyboard.enabled) return;
- document.addEventListener('keydown', handle);
- swiper.keyboard.enabled = true;
- }
- function disable() {
- if (!swiper.keyboard.enabled) return;
- document.removeEventListener('keydown', handle);
- swiper.keyboard.enabled = false;
- }
- on('init', () => {
- if (swiper.params.keyboard.enabled) {
- enable();
- }
- });
- on('destroy', () => {
- if (swiper.keyboard.enabled) {
- disable();
- }
- });
- Object.assign(swiper.keyboard, {
- enable,
- disable
- });
- }
- export { Keyboard as default };
|