index.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. import onLoad from './onLoad.js';
  9. let dummyEventAttached = false;
  10. function dummyEventListener() {}
  11. const events = (swiper, method) => {
  12. const document = getDocument();
  13. const {
  14. params,
  15. el,
  16. wrapperEl,
  17. device
  18. } = swiper;
  19. const capture = !!params.nested;
  20. const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';
  21. const swiperMethod = method;
  22. // Touch Events
  23. el[domMethod]('pointerdown', swiper.onTouchStart, {
  24. passive: false
  25. });
  26. document[domMethod]('pointermove', swiper.onTouchMove, {
  27. passive: false,
  28. capture
  29. });
  30. document[domMethod]('pointerup', swiper.onTouchEnd, {
  31. passive: true
  32. });
  33. document[domMethod]('pointercancel', swiper.onTouchEnd, {
  34. passive: true
  35. });
  36. document[domMethod]('pointerout', swiper.onTouchEnd, {
  37. passive: true
  38. });
  39. document[domMethod]('pointerleave', swiper.onTouchEnd, {
  40. passive: true
  41. });
  42. // Prevent Links Clicks
  43. if (params.preventClicks || params.preventClicksPropagation) {
  44. el[domMethod]('click', swiper.onClick, true);
  45. }
  46. if (params.cssMode) {
  47. wrapperEl[domMethod]('scroll', swiper.onScroll);
  48. }
  49. // Resize handler
  50. if (params.updateOnWindowResize) {
  51. swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);
  52. } else {
  53. swiper[swiperMethod]('observerUpdate', onResize, true);
  54. }
  55. // Images loader
  56. el[domMethod]('load', swiper.onLoad, {
  57. capture: true
  58. });
  59. };
  60. function attachEvents() {
  61. const swiper = this;
  62. const document = getDocument();
  63. const {
  64. params
  65. } = swiper;
  66. swiper.onTouchStart = onTouchStart.bind(swiper);
  67. swiper.onTouchMove = onTouchMove.bind(swiper);
  68. swiper.onTouchEnd = onTouchEnd.bind(swiper);
  69. if (params.cssMode) {
  70. swiper.onScroll = onScroll.bind(swiper);
  71. }
  72. swiper.onClick = onClick.bind(swiper);
  73. swiper.onLoad = onLoad.bind(swiper);
  74. if (!dummyEventAttached) {
  75. document.addEventListener('touchstart', dummyEventListener);
  76. dummyEventAttached = true;
  77. }
  78. events(swiper, 'on');
  79. }
  80. function detachEvents() {
  81. const swiper = this;
  82. events(swiper, 'off');
  83. }
  84. export default {
  85. attachEvents,
  86. detachEvents
  87. };