index.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { getDocument } from 'ssr-window';
  2. import onTouchStart from './onTouchStart.js';
  3. import onTouchMove from './onTouchMove.js';
  4. import onTouchEnd from './onTouchEnd.js';
  5. import onResize from './onResize.js';
  6. import onClick from './onClick.js';
  7. import onScroll from './onScroll.js';
  8. let dummyEventAttached = false;
  9. function dummyEventListener() {}
  10. const events = (swiper, method) => {
  11. const document = getDocument();
  12. const {
  13. params,
  14. touchEvents,
  15. el,
  16. wrapperEl,
  17. device,
  18. support
  19. } = swiper;
  20. const capture = !!params.nested;
  21. const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';
  22. const swiperMethod = method; // Touch Events
  23. if (!support.touch) {
  24. el[domMethod](touchEvents.start, swiper.onTouchStart, false);
  25. document[domMethod](touchEvents.move, swiper.onTouchMove, capture);
  26. document[domMethod](touchEvents.end, swiper.onTouchEnd, false);
  27. } else {
  28. const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {
  29. passive: true,
  30. capture: false
  31. } : false;
  32. el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);
  33. el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {
  34. passive: false,
  35. capture
  36. } : capture);
  37. el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);
  38. if (touchEvents.cancel) {
  39. el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);
  40. }
  41. } // Prevent Links Clicks
  42. if (params.preventClicks || params.preventClicksPropagation) {
  43. el[domMethod]('click', swiper.onClick, true);
  44. }
  45. if (params.cssMode) {
  46. wrapperEl[domMethod]('scroll', swiper.onScroll);
  47. } // Resize handler
  48. if (params.updateOnWindowResize) {
  49. swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);
  50. } else {
  51. swiper[swiperMethod]('observerUpdate', onResize, true);
  52. }
  53. };
  54. function attachEvents() {
  55. const swiper = this;
  56. const document = getDocument();
  57. const {
  58. params,
  59. support
  60. } = swiper;
  61. swiper.onTouchStart = onTouchStart.bind(swiper);
  62. swiper.onTouchMove = onTouchMove.bind(swiper);
  63. swiper.onTouchEnd = onTouchEnd.bind(swiper);
  64. if (params.cssMode) {
  65. swiper.onScroll = onScroll.bind(swiper);
  66. }
  67. swiper.onClick = onClick.bind(swiper);
  68. if (support.touch && !dummyEventAttached) {
  69. document.addEventListener('touchstart', dummyEventListener);
  70. dummyEventAttached = true;
  71. }
  72. events(swiper, 'on');
  73. }
  74. function detachEvents() {
  75. const swiper = this;
  76. events(swiper, 'off');
  77. }
  78. export default {
  79. attachEvents,
  80. detachEvents
  81. };