diff --git a/src/touch-controls.js b/src/touch-controls.js
index 8390df50ec8..e0729573139 100644
--- a/src/touch-controls.js
+++ b/src/touch-controls.js
@@ -115,3 +115,29 @@ function bindKey(node, key, buttonMap) {
     }
   });
 }
+
+/**
+ * {@link https://stackoverflow.com/a/39778831/4622620|Source}
+ *
+ * Prevent zoom on specified element
+ * @param {HTMLElement} element
+ */
+function preventElementZoom(element) {
+  element.addEventListener("touchstart", (event) => {
+    const currentTouchTimeStamp = event.timeStamp;
+    const previousTouchTimeStamp = event.currentTarget.dataset.lastTouchTimeStamp || currentTouchTimeStamp;
+    const timeStampDifference = currentTouchTimeStamp - previousTouchTimeStamp;
+    const fingers = event.touches.length;
+    event.currentTarget.dataset.lastTouchTimeStamp = currentTouchTimeStamp;
+
+    if (!timeStampDifference || timeStampDifference > 500 || fingers > 1) {
+      return;
+    } // not double-tap
+
+    event.preventDefault();
+    event.target.click();
+  });
+}
+
+const dpadDiv = document.querySelector("#dpad");
+preventElementZoom(dpadDiv);