scrollPlugin.js 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. (function (global, factory) {
  2. typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  3. typeof define === 'function' && define.amd ? define(factory) :
  4. (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.scrollPlugin = factory());
  5. }(this, (function () { 'use strict';
  6. function getEventTarget(event) {
  7. try {
  8. if (typeof event.composedPath === "function") {
  9. var path = event.composedPath();
  10. return path[0];
  11. }
  12. return event.target;
  13. }
  14. catch (error) {
  15. return event.target;
  16. }
  17. }
  18. if (typeof window.CustomEvent !== "function") {
  19. function CustomEvent(typeArg, eventInitDict) {
  20. eventInitDict = eventInitDict || {
  21. bubbles: false,
  22. cancelable: false,
  23. detail: undefined,
  24. };
  25. var evt = document.createEvent("CustomEvent");
  26. evt.initCustomEvent(typeArg, eventInitDict.bubbles, eventInitDict.cancelable, eventInitDict.detail);
  27. return evt;
  28. }
  29. CustomEvent.prototype = window.Event.prototype;
  30. window.CustomEvent = CustomEvent;
  31. }
  32. function delta(e) {
  33. return Math.max(-1, Math.min(1, e.wheelDelta || -e.deltaY));
  34. }
  35. var scroll = function (e) {
  36. e.preventDefault();
  37. var ev = new CustomEvent("increment", {
  38. bubbles: true,
  39. });
  40. ev.delta = delta(e);
  41. getEventTarget(e).dispatchEvent(ev);
  42. };
  43. function scrollMonth(fp) {
  44. return function (e) {
  45. e.preventDefault();
  46. var mDelta = delta(e);
  47. fp.changeMonth(mDelta);
  48. };
  49. }
  50. function scrollPlugin() {
  51. return function (fp) {
  52. var monthScroller = scrollMonth(fp);
  53. return {
  54. onReady: function () {
  55. if (fp.timeContainer) {
  56. fp.timeContainer.addEventListener("wheel", scroll);
  57. }
  58. fp.yearElements.forEach(function (yearElem) {
  59. return yearElem.addEventListener("wheel", scroll);
  60. });
  61. fp.monthElements.forEach(function (monthElem) {
  62. return monthElem.addEventListener("wheel", monthScroller);
  63. });
  64. fp.loadedPlugins.push("scroll");
  65. },
  66. onDestroy: function () {
  67. if (fp.timeContainer) {
  68. fp.timeContainer.removeEventListener("wheel", scroll);
  69. }
  70. fp.yearElements.forEach(function (yearElem) {
  71. return yearElem.removeEventListener("wheel", scroll);
  72. });
  73. fp.monthElements.forEach(function (monthElem) {
  74. return monthElem.removeEventListener("wheel", monthScroller);
  75. });
  76. },
  77. };
  78. };
  79. }
  80. return scrollPlugin;
  81. })));