Skip to content

Commit d1ea511

Browse files
author
sherwinski
authored
fix: prevent zoom on mobile when handleTouch is set to false (#293)
1 parent e982561 commit d1ea511

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

src/js/Trigger.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ export default class Trigger {
5757
return this.settings.zoomPane.isShowing;
5858
}
5959

60+
_preventDefault(event) {
61+
event.preventDefault();
62+
}
63+
6064
_bindEvents() {
6165
this.settings.el.addEventListener("mouseenter", this._handleEntry, false);
6266
this.settings.el.addEventListener("mouseleave", this._hide, false);
@@ -66,6 +70,10 @@ export default class Trigger {
6670
this.settings.el.addEventListener("touchstart", this._handleEntry, false);
6771
this.settings.el.addEventListener("touchend", this._hide, false);
6872
this.settings.el.addEventListener("touchmove", this._handleMovement, false);
73+
} else {
74+
this.settings.el.addEventListener("touchstart", this._preventDefault, false);
75+
this.settings.el.addEventListener("touchend", this._preventDefault, false);
76+
this.settings.el.addEventListener("touchmove", this._preventDefault, false);
6977
}
7078
}
7179

@@ -78,6 +86,10 @@ export default class Trigger {
7886
this.settings.el.removeEventListener("touchstart", this._handleEntry, false);
7987
this.settings.el.removeEventListener("touchend", this._hide, false);
8088
this.settings.el.removeEventListener("touchmove", this._handleMovement, false);
89+
} else {
90+
this.settings.el.removeEventListener("touchstart", this._preventDefault, false);
91+
this.settings.el.removeEventListener("touchend", this._preventDefault, false);
92+
this.settings.el.removeEventListener("touchmove", this._preventDefault, false);
8193
}
8294
}
8395

test/testTrigger.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,28 @@ describe("Trigger", () => {
8989

9090
expect(called).toBe(true);
9191
});
92+
93+
it("executes touchstart on mobile when handleTouch is set to true", () => {
94+
const opts = triggerOptions();
95+
opts.handleTouch = true;
96+
const spy = spyOn(Trigger.prototype, "_handleEntry");
97+
const trigger = new Trigger(opts);
98+
99+
const event = new Event("touchstart");
100+
101+
trigger.settings.el.dispatchEvent(event);
102+
expect(spy).toHaveBeenCalled();
103+
});
104+
105+
it("does not execute touchstart on mobile when handleTouch is set to false", () => {
106+
const opts = triggerOptions();
107+
opts.handleTouch = false;
108+
const spy = spyOn(Trigger.prototype, "_handleEntry");
109+
const trigger = new Trigger(opts);
110+
111+
const event = new Event("touchstart");
112+
113+
trigger.settings.el.dispatchEvent(event);
114+
expect(spy).not.toHaveBeenCalled();
115+
});
92116
});

0 commit comments

Comments
 (0)