Skip to content

Commit 2d2de3a

Browse files
committed
[mv3] Prevent scrolling taking over moving dialog in picker
1 parent 1e0c640 commit 2d2de3a

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

platform/mv3/extension/js/tool-overlay-ui.js

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,8 @@ export const toolOverlay = {
4848
};
4949
this.moveable = qs$('aside:has(#move)');
5050
if ( this.moveable !== null ) {
51-
dom.on('aside #move', 'pointerdown', ev => {
52-
this.mover(ev);
53-
});
51+
dom.on('aside #move', 'pointerdown', ev => { this.mover(ev); });
52+
dom.on('aside #move', 'touchstart', this.eatTouchEvent);
5453
}
5554
this.onMessage({ what: 'startTool',
5655
url: msg.url,
@@ -180,7 +179,10 @@ export const toolOverlay = {
180179
this.moverCX0 = rect.x + rect.width / 2;
181180
this.moverCY0 = rect.y + rect.height / 2;
182181
dom.cl.add(this.moveable, 'moving');
183-
self.addEventListener('pointermove', this.moverMoveAsync, { capture: true });
182+
self.addEventListener('pointermove', this.moverMoveAsync, {
183+
passive: true,
184+
capture: true,
185+
});
184186
self.addEventListener('pointerup', this.moverStop, { capture: true, once: true });
185187
ev.stopPropagation();
186188
ev.preventDefault();
@@ -209,7 +211,6 @@ export const toolOverlay = {
209211
}
210212
},
211213
moverMoveAsync(ev) {
212-
if ( toolOverlay.moverTimer !== undefined ) { return; }
213214
if ( toolOverlay.moverIsTouch ) {
214215
const touch = ev.touches[0];
215216
toolOverlay.moverX1 = touch.pageX;
@@ -218,18 +219,27 @@ export const toolOverlay = {
218219
toolOverlay.moverX1 = ev.pageX;
219220
toolOverlay.moverY1 = ev.pageY;
220221
}
222+
if ( toolOverlay.moverTimer !== undefined ) { return; }
221223
toolOverlay.moverTimer = self.requestAnimationFrame(( ) => {
222224
toolOverlay.moverMove();
223225
});
224226
},
225227
moverStop(ev) {
226228
if ( dom.cl.has(toolOverlay.moveable, 'moving') === false ) { return; }
227229
dom.cl.remove(toolOverlay.moveable, 'moving');
228-
self.removeEventListener('pointermove', toolOverlay.moverMoveAsync, { capture: true });
230+
self.removeEventListener('pointermove', toolOverlay.moverMoveAsync, {
231+
passive: true,
232+
capture: true,
233+
});
229234
ev.target.releasePointerCapture(ev.pointerId);
230235
ev.stopPropagation();
231236
ev.preventDefault();
232237
},
238+
eatTouchEvent(ev) {
239+
if ( ev.target !== qs$('aside #move') ) { return; }
240+
ev.stopPropagation();
241+
ev.preventDefault();
242+
},
233243
moveable: null,
234244
moverIsTouch: false,
235245
moverX0: 0, moverY0: 0,

0 commit comments

Comments
 (0)