index.umd.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. (function (global, factory) {
  2. typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@antv/g-lite')) :
  3. typeof define === 'function' && define.amd ? define(['exports', '@antv/g-lite'], factory) :
  4. (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.G = global.G || {}, global.G.DOMInteraction = {}), global.window.G));
  5. }(this, (function (exports, gLite) { 'use strict';
  6. function _inheritsLoose(subClass, superClass) {
  7. subClass.prototype = Object.create(superClass.prototype);
  8. subClass.prototype.constructor = subClass;
  9. _setPrototypeOf(subClass, superClass);
  10. }
  11. function _setPrototypeOf(o, p) {
  12. _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
  13. o.__proto__ = p;
  14. return o;
  15. };
  16. return _setPrototypeOf(o, p);
  17. }
  18. // const MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;
  19. /**
  20. * listen to mouse/touch/pointer events on DOM wrapper, trigger pointer events
  21. */
  22. var DOMInteractionPlugin = /*#__PURE__*/function () {
  23. function DOMInteractionPlugin() {
  24. this.context = void 0;
  25. }
  26. var _proto = DOMInteractionPlugin.prototype;
  27. _proto.apply = function apply(context, runtime) {
  28. var _this = this;
  29. var renderingService = context.renderingService,
  30. renderingContext = context.renderingContext,
  31. config = context.config;
  32. this.context = context;
  33. var canvas = renderingContext.root.ownerDocument.defaultView;
  34. // const SUPPORT_ONLY_TOUCH = canvas.supportsTouchEvents && MOBILE_REGEX.test(navigator.userAgent);
  35. var onPointerMove = function onPointerMove(ev) {
  36. renderingService.hooks.pointerMove.call(ev);
  37. };
  38. var onPointerUp = function onPointerUp(ev) {
  39. renderingService.hooks.pointerUp.call(ev);
  40. };
  41. var onPointerDown = function onPointerDown(ev) {
  42. renderingService.hooks.pointerDown.call(ev);
  43. };
  44. var onPointerOver = function onPointerOver(ev) {
  45. renderingService.hooks.pointerOver.call(ev);
  46. };
  47. var onPointerOut = function onPointerOut(ev) {
  48. renderingService.hooks.pointerOut.call(ev);
  49. };
  50. var onPointerCancel = function onPointerCancel(ev) {
  51. renderingService.hooks.pointerCancel.call(ev);
  52. };
  53. var onPointerWheel = function onPointerWheel(ev) {
  54. renderingService.hooks.pointerWheel.call(ev);
  55. };
  56. var onClick = function onClick(ev) {
  57. renderingService.hooks.click.call(ev);
  58. };
  59. var addPointerEventListener = function addPointerEventListener($el) {
  60. runtime.globalThis.document.addEventListener('pointermove', onPointerMove, true);
  61. $el.addEventListener('pointerdown', onPointerDown, true);
  62. $el.addEventListener('pointerleave', onPointerOut, true);
  63. $el.addEventListener('pointerover', onPointerOver, true);
  64. runtime.globalThis.addEventListener('pointerup', onPointerUp, true);
  65. runtime.globalThis.addEventListener('pointercancel', onPointerCancel, true);
  66. };
  67. var addTouchEventListener = function addTouchEventListener($el) {
  68. $el.addEventListener('touchstart', onPointerDown, true);
  69. $el.addEventListener('touchend', onPointerUp, true);
  70. $el.addEventListener('touchmove', onPointerMove, true);
  71. $el.addEventListener('touchcancel', onPointerCancel, true);
  72. };
  73. var addMouseEventListener = function addMouseEventListener($el) {
  74. runtime.globalThis.document.addEventListener('mousemove', onPointerMove, true);
  75. $el.addEventListener('mousedown', onPointerDown, true);
  76. $el.addEventListener('mouseout', onPointerOut, true);
  77. $el.addEventListener('mouseover', onPointerOver, true);
  78. runtime.globalThis.addEventListener('mouseup', onPointerUp, true);
  79. };
  80. var removePointerEventListener = function removePointerEventListener($el) {
  81. runtime.globalThis.document.removeEventListener('pointermove', onPointerMove, true);
  82. $el.removeEventListener('pointerdown', onPointerDown, true);
  83. $el.removeEventListener('pointerleave', onPointerOut, true);
  84. $el.removeEventListener('pointerover', onPointerOver, true);
  85. runtime.globalThis.removeEventListener('pointerup', onPointerUp, true);
  86. };
  87. var removeTouchEventListener = function removeTouchEventListener($el) {
  88. $el.removeEventListener('touchstart', onPointerDown, true);
  89. $el.removeEventListener('touchend', onPointerUp, true);
  90. $el.removeEventListener('touchmove', onPointerMove, true);
  91. $el.removeEventListener('touchcancel', onPointerCancel, true);
  92. };
  93. var removeMouseEventListener = function removeMouseEventListener($el) {
  94. runtime.globalThis.document.removeEventListener('mousemove', onPointerMove, true);
  95. $el.removeEventListener('mousedown', onPointerDown, true);
  96. $el.removeEventListener('mouseout', onPointerOut, true);
  97. $el.removeEventListener('mouseover', onPointerOver, true);
  98. runtime.globalThis.removeEventListener('mouseup', onPointerUp, true);
  99. };
  100. renderingService.hooks.init.tap(DOMInteractionPlugin.tag, function () {
  101. var $el = _this.context.contextService.getDomElement();
  102. // @ts-ignore
  103. if (runtime.globalThis.navigator.msPointerEnabled) {
  104. // @ts-ignore
  105. $el.style.msContentZooming = 'none';
  106. // @ts-ignore
  107. $el.style.msTouchAction = 'none';
  108. } else if (canvas.supportsPointerEvents) {
  109. $el.style.touchAction = 'none';
  110. }
  111. if (canvas.supportsPointerEvents) {
  112. addPointerEventListener($el);
  113. } else {
  114. addMouseEventListener($el);
  115. }
  116. if (canvas.supportsTouchEvents) {
  117. addTouchEventListener($el);
  118. }
  119. if (config.useNativeClickEvent) {
  120. $el.addEventListener('click', onClick, true);
  121. }
  122. // use passive event listeners
  123. // @see https://zhuanlan.zhihu.com/p/24555031
  124. $el.addEventListener('wheel', onPointerWheel, {
  125. passive: true,
  126. capture: true
  127. });
  128. });
  129. renderingService.hooks.destroy.tap(DOMInteractionPlugin.tag, function () {
  130. var $el = _this.context.contextService.getDomElement();
  131. // @ts-ignore
  132. if (runtime.globalThis.navigator.msPointerEnabled) {
  133. // @ts-ignore
  134. $el.style.msContentZooming = '';
  135. // @ts-ignore
  136. $el.style.msTouchAction = '';
  137. } else if (canvas.supportsPointerEvents) {
  138. $el.style.touchAction = '';
  139. }
  140. if (canvas.supportsPointerEvents) {
  141. removePointerEventListener($el);
  142. } else {
  143. removeMouseEventListener($el);
  144. }
  145. if (canvas.supportsTouchEvents) {
  146. removeTouchEventListener($el);
  147. }
  148. if (config.useNativeClickEvent) {
  149. $el.removeEventListener('click', onClick, true);
  150. }
  151. $el.removeEventListener('wheel', onPointerWheel, true);
  152. });
  153. };
  154. return DOMInteractionPlugin;
  155. }();
  156. DOMInteractionPlugin.tag = 'DOMInteraction';
  157. var Plugin = /*#__PURE__*/function (_AbstractRendererPlug) {
  158. _inheritsLoose(Plugin, _AbstractRendererPlug);
  159. function Plugin() {
  160. var _this;
  161. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  162. args[_key] = arguments[_key];
  163. }
  164. _this = _AbstractRendererPlug.call.apply(_AbstractRendererPlug, [this].concat(args)) || this;
  165. _this.name = 'dom-interaction';
  166. return _this;
  167. }
  168. var _proto = Plugin.prototype;
  169. _proto.init = function init() {
  170. this.addRenderingPlugin(new DOMInteractionPlugin());
  171. };
  172. _proto.destroy = function destroy() {
  173. this.removeAllRenderingPlugins();
  174. };
  175. return Plugin;
  176. }(gLite.AbstractRendererPlugin);
  177. exports.Plugin = Plugin;
  178. Object.defineProperty(exports, '__esModule', { value: true });
  179. })));