From 990939318f572fe2226784f5ecbd83d5f1709397 Mon Sep 17 00:00:00 2001 From: Aman Harwara Date: Wed, 12 Oct 2022 00:54:15 +0530 Subject: [PATCH] fix: viewport height-related issue on mobile --- packages/web/src/javascripts/App.tsx | 35 +++++++++++-------------- packages/web/src/stylesheets/_main.scss | 2 -- 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/packages/web/src/javascripts/App.tsx b/packages/web/src/javascripts/App.tsx index 512686c96..86e9b56fe 100644 --- a/packages/web/src/javascripts/App.tsx +++ b/packages/web/src/javascripts/App.tsx @@ -1,6 +1,6 @@ 'use strict' -import { disableIosTextFieldZoom } from '@/Utils' +import { disableIosTextFieldZoom, isDev } from '@/Utils' declare global { interface Window { @@ -42,22 +42,27 @@ const getKey = () => { return keyCount++ } -let initialCorrectViewportHeight: number | null = null +const ViewportHeightKey = '--viewport-height' -export const setViewportHeightWithFallback = (isOrientationChange = false) => { +export const setViewportHeightWithFallback = () => { + const currentHeight = parseInt(document.documentElement.style.getPropertyValue(ViewportHeightKey)) const newValue = visualViewport && visualViewport.height > 0 ? visualViewport.height : window.innerHeight - if (initialCorrectViewportHeight && newValue < initialCorrectViewportHeight && !isOrientationChange) { + if (isDev) { + // eslint-disable-next-line no-console + console.log(`currentHeight: ${currentHeight}, newValue: ${newValue}`) + } + + if (currentHeight && newValue < currentHeight) { return } if (!newValue) { - document.documentElement.style.setProperty('--viewport-height', '100vh') + document.documentElement.style.setProperty(ViewportHeightKey, '100vh') return } - initialCorrectViewportHeight = newValue - document.documentElement.style.setProperty('--viewport-height', `${newValue}px`) + document.documentElement.style.setProperty(ViewportHeightKey, `${newValue}px`) } const setDefaultMonospaceFont = (platform?: Platform) => { @@ -84,26 +89,18 @@ const startApplication: StartApplication = async function startApplication( device.environment === Environment.Desktop || (matchMedia(MediaQueryBreakpoints.md).matches && matchMedia(MediaQueryBreakpoints.pointerFine)) - const orientationChangeHandler = () => { - setViewportHeightWithFallback(true) - } - - const resizeHandler = () => { - setViewportHeightWithFallback(false) - } - const setupViewportHeightListeners = () => { if (!isDesktop) { setViewportHeightWithFallback() - window.addEventListener('orientationchange', orientationChangeHandler) - window.addEventListener('resize', resizeHandler) + window.addEventListener('orientationchange', setViewportHeightWithFallback) + window.addEventListener('resize', setViewportHeightWithFallback) } } const removeViewportHeightListeners = () => { if (!isDesktop) { - window.removeEventListener('orientationchange', orientationChangeHandler) - window.removeEventListener('resize', resizeHandler) + window.removeEventListener('orientationchange', setViewportHeightWithFallback) + window.removeEventListener('resize', setViewportHeightWithFallback) } } diff --git a/packages/web/src/stylesheets/_main.scss b/packages/web/src/stylesheets/_main.scss index 631a93076..f0bbb2d8e 100644 --- a/packages/web/src/stylesheets/_main.scss +++ b/packages/web/src/stylesheets/_main.scss @@ -35,8 +35,6 @@ @media screen and (max-width: 768px) { --sn-stylekit-font-size-editor: 1rem; } - - --viewport-height: 100vh; } html {