Files
echecsfrance/hooks/useDynamicViewportUnits.ts
T
2023-09-11 10:12:16 +02:00

50 lines
1.1 KiB
TypeScript

export const useDynamicViewportUnits = () => {
const setVh = function () {
var svh = document.documentElement.clientHeight * 0.01;
document.documentElement.style.setProperty("--1svh", svh + "px");
var dvh = window.innerHeight * 0.01;
document.documentElement.style.setProperty("--1dvh", dvh + "px");
};
const isMobile = function () {
if (
/Android|iPhone|iPad|iPod/i.test(navigator.userAgent) ||
(navigator.userAgent.match(/Mac/) &&
navigator.maxTouchPoints &&
navigator.maxTouchPoints > 2)
) {
return true;
}
return false;
};
// SSR support
if (typeof window === "undefined") {
return;
}
// Don't run polyfill if browser supports the units natively
if (
"CSS" in window &&
"supports" in window.CSS &&
window.CSS.supports("height: 100svh") &&
window.CSS.supports("height: 100dvh") &&
window.CSS.supports("height: 100lvh")
) {
return;
}
// Don't run on desktop browsers
if (!isMobile) {
return;
}
window.addEventListener("resize", setVh);
setVh();
return () => {
window.removeEventListener("resize", setVh);
};
};