index.js 7.1 KB

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