MCPcopy Index your code
hub / github.com/spritejs/spritejs / delegateEvents

Function delegateEvents

lib/node/scene.js:136–263  ·  view source on GitHub ↗
(scene)

Source from the content-addressed store, hash-verified

134var touchEventCapturedTargets = {};
135
136function delegateEvents(scene) {
137 var events = ['mousedown', 'mouseup', 'mousemove', 'mousewheel', 'wheel', 'touchstart', 'touchend', 'touchmove', 'touchcancel', 'click', 'dblclick', 'longpress', 'tap', 'contextmenu'];
138 var container = scene.container;
139 container.addEventListener('mouseleave', function (event) {
140 var enteredTargets = scene[_enteredTargets];
141
142 if (enteredTargets.size) {
143 var leaveEvent = new _event.default('mouseleave');
144 leaveEvent.setOriginalEvent(event);
145 (0, _toConsumableArray2.default)(enteredTargets).forEach(function (target) {
146 target.dispatchEvent(leaveEvent);
147 });
148
149 scene[_enteredTargets].clear();
150 }
151 }, {
152 passive: true
153 });
154 events.forEach(function (eventType) {
155 container.addEventListener(eventType, function (event) {
156 var _scene$options = scene.options,
157 left = _scene$options.left,
158 top = _scene$options.top,
159 displayRatio = _scene$options.displayRatio;
160 var layers = scene.orderedChildren;
161 var pointerEvents = (0, _pointerEvents.default)(event, {
162 offsetLeft: left,
163 offsetTop: top,
164 displayRatio: displayRatio
165 });
166 pointerEvents.forEach(function (evt) {
167 // evt.scene = scene;
168 var id = evt.identifier;
169
170 if (evt.type === 'touchmove' || evt.type === 'touchend') {
171 var capturedTarget = touchEventCapturedTargets[id];
172 if (capturedTarget) capturedTarget.dispatchEvent(evt);
173 if (evt.type === 'touchend') delete touchEventCapturedTargets[id];
174 } else {
175 for (var i = layers.length - 1; i >= 0; i--) {
176 var layer = layers[i];
177
178 if (layer.options.handleEvent !== false) {
179 var ret = layer.dispatchPointerEvent(evt);
180 if (ret && evt.target !== layer) break;else evt.cancelBubble = false; // prepare passing to next layer
181 }
182 }
183
184 if (evt.target === layers[0]) {
185 // trigger event on top layer
186 for (var _i = layers.length - 1; _i >= 0; _i--) {
187 var _layer = layers[_i];
188
189 if (_layer.options.handleEvent !== false) {
190 evt.target = _layer;
191 break;
192 }
193 }

Callers 1

SceneFunction · 0.70

Calls 7

clearMethod · 0.65
deleteMethod · 0.65
addEventListenerMethod · 0.45
setOriginalEventMethod · 0.45
dispatchEventMethod · 0.45
dispatchPointerEventMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected