summaryrefslogtreecommitdiff
path: root/apps/web/src/hooks/use-disable-browser-zoom.ts
diff options
context:
space:
mode:
authorgantiro <gantiro396@gmail.com>2025-07-15 22:56:56 +0700
committergantiro <gantiro396@gmail.com>2025-07-15 22:56:56 +0700
commit52f003f25ab8d3124ddf4880c44f874206d7f988 (patch)
treefee80fc0bedf0122e3aa6f020d23642a4093cee7 /apps/web/src/hooks/use-disable-browser-zoom.ts
parentb266678fe4bb8c4053688fd037693fa2f930ac14 (diff)
downloadopencut-52f003f25ab8d3124ddf4880c44f874206d7f988.tar.gz
add comment for hooks
Diffstat (limited to 'apps/web/src/hooks/use-disable-browser-zoom.ts')
-rw-r--r--apps/web/src/hooks/use-disable-browser-zoom.ts38
1 files changed, 28 insertions, 10 deletions
diff --git a/apps/web/src/hooks/use-disable-browser-zoom.ts b/apps/web/src/hooks/use-disable-browser-zoom.ts
index 215268ac..9467cb71 100644
--- a/apps/web/src/hooks/use-disable-browser-zoom.ts
+++ b/apps/web/src/hooks/use-disable-browser-zoom.ts
@@ -1,13 +1,32 @@
import { useEffect } from "react";
+/**
+ * useDisableBrowserZoom
+ *
+ * This React hook prevents users from zooming in/out the browser window using keyboard shortcuts,
+ * mouse wheel, or gesture events (such as pinch-to-zoom on trackpads or touch devices).
+ *
+ * Typical use case: apps with fixed-size UIs, custom editors, or when zooming would break layout.
+ *
+ * NOTE: Disabling browser zoom may negatively affect accessibility and user experience.
+ * Use with caution, especially for public-facing applications.
+ */
export const useDisableBrowserZoom = () => {
useEffect(() => {
+ /**
+ * Prevents browser zoom when user holds Ctrl (or Cmd on Mac) and scrolls the mouse wheel.
+ */
const handleWheel = (e: WheelEvent) => {
if (e.ctrlKey) {
e.preventDefault();
}
};
+ /**
+ * Prevents browser zoom via keyboard shortcuts:
+ * Ctrl/Cmd + '+', '-', '=', or '0' (reset zoom)
+ * Some keyboards emit '=' for '+' (without Shift).
+ */
const handleKeyDown = (e: KeyboardEvent) => {
if (e.ctrlKey) {
const key = e.key;
@@ -17,23 +36,22 @@ export const useDisableBrowserZoom = () => {
}
};
+ /**
+ * Prevents pinch-zoom gestures on supported browsers (mainly Safari/macOS/iOS).
+ * gesturestart, gesturechange, and gestureend are non-standard and not supported everywhere.
+ */
const handleGesture = (e: Event) => {
e.preventDefault();
};
+ // Attach event listeners (passive: false is required for preventDefault to work)
window.addEventListener("wheel", handleWheel, { passive: false });
window.addEventListener("keydown", handleKeyDown, { passive: false });
+ window.addEventListener("gesturestart", handleGesture, { passive: false });
+ window.addEventListener("gesturechange", handleGesture, { passive: false });
+ window.addEventListener("gestureend", handleGesture, { passive: false });
- window.addEventListener("gesturestart", handleGesture, {
- passive: false,
- });
- window.addEventListener("gesturechange", handleGesture, {
- passive: false,
- });
- window.addEventListener("gestureend", handleGesture, {
- passive: false,
- });
-
+ // Cleanup listeners on unmount to avoid memory leaks
return () => {
window.removeEventListener("wheel", handleWheel);
window.removeEventListener("keydown", handleKeyDown);