Files
echecsfrance/hooks/useDynamicViewportUnits.ts
T

45 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);
}
}