Blame view

node_modules/zrender/lib/core/event.js 3.13 KB
bd028579   易尊强   2/28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
  import Eventful from './Eventful.js';
  import env from './env.js';
  import { isCanvasEl, transformCoordWithViewport } from './dom.js';
  var MOUSE_EVENT_REG = /^(?:mouse|pointer|contextmenu|drag|drop)|click/;
  var _calcOut = [];
  var firefoxNotSupportOffsetXY = env.browser.firefox
      && +env.browser.version.split('.')[0] < 39;
  export function clientToLocal(el, e, out, calculate) {
      out = out || {};
      if (calculate) {
          calculateZrXY(el, e, out);
      }
      else if (firefoxNotSupportOffsetXY
          && e.layerX != null
          && e.layerX !== e.offsetX) {
          out.zrX = e.layerX;
          out.zrY = e.layerY;
      }
      else if (e.offsetX != null) {
          out.zrX = e.offsetX;
          out.zrY = e.offsetY;
      }
      else {
          calculateZrXY(el, e, out);
      }
      return out;
  }
  function calculateZrXY(el, e, out) {
      if (env.domSupported && el.getBoundingClientRect) {
          var ex = e.clientX;
          var ey = e.clientY;
          if (isCanvasEl(el)) {
              var box = el.getBoundingClientRect();
              out.zrX = ex - box.left;
              out.zrY = ey - box.top;
              return;
          }
          else {
              if (transformCoordWithViewport(_calcOut, el, ex, ey)) {
                  out.zrX = _calcOut[0];
                  out.zrY = _calcOut[1];
                  return;
              }
          }
      }
      out.zrX = out.zrY = 0;
  }
  export function getNativeEvent(e) {
      return e
          || window.event;
  }
  export function normalizeEvent(el, e, calculate) {
      e = getNativeEvent(e);
      if (e.zrX != null) {
          return e;
      }
      var eventType = e.type;
      var isTouch = eventType && eventType.indexOf('touch') >= 0;
      if (!isTouch) {
          clientToLocal(el, e, e, calculate);
          var wheelDelta = getWheelDeltaMayPolyfill(e);
          e.zrDelta = wheelDelta ? wheelDelta / 120 : -(e.detail || 0) / 3;
      }
      else {
          var touch = eventType !== 'touchend'
              ? e.targetTouches[0]
              : e.changedTouches[0];
          touch && clientToLocal(el, touch, e, calculate);
      }
      var button = e.button;
      if (e.which == null && button !== undefined && MOUSE_EVENT_REG.test(e.type)) {
          e.which = (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0)));
      }
      return e;
  }
  function getWheelDeltaMayPolyfill(e) {
      var rawWheelDelta = e.wheelDelta;
      if (rawWheelDelta) {
          return rawWheelDelta;
      }
      var deltaX = e.deltaX;
      var deltaY = e.deltaY;
      if (deltaX == null || deltaY == null) {
          return rawWheelDelta;
      }
      var delta = deltaY !== 0 ? Math.abs(deltaY) : Math.abs(deltaX);
      var sign = deltaY > 0 ? -1
          : deltaY < 0 ? 1
              : deltaX > 0 ? -1
                  : 1;
      return 3 * delta * sign;
  }
  export function addEventListener(el, name, handler, opt) {
      el.addEventListener(name, handler, opt);
  }
  export function removeEventListener(el, name, handler, opt) {
      el.removeEventListener(name, handler, opt);
  }
  export var stop = function (e) {
      e.preventDefault();
      e.stopPropagation();
      e.cancelBubble = true;
  };
  export function isMiddleOrRightButtonOnMouseUpDown(e) {
      return e.which === 2 || e.which === 3;
  }
  export { Eventful as Dispatcher };