You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
840 B
36 lines
840 B
import { isMobile } from '../is_mobile'; |
|
|
|
/** @type {number | null} */ |
|
let cachedScrollbarWidth = null; |
|
|
|
/** |
|
* @return {number} |
|
*/ |
|
const getActualScrollbarWidth = () => { |
|
const outer = document.createElement('div'); |
|
outer.style.visibility = 'hidden'; |
|
outer.style.overflow = 'scroll'; |
|
document.body.appendChild(outer); |
|
|
|
const inner = document.createElement('div'); |
|
outer.appendChild(inner); |
|
|
|
const scrollbarWidth = outer.offsetWidth - inner.offsetWidth; |
|
outer.parentNode.removeChild(outer); |
|
|
|
return scrollbarWidth; |
|
}; |
|
|
|
/** |
|
* @return {number} |
|
*/ |
|
export const getScrollbarWidth = () => { |
|
if (cachedScrollbarWidth !== null) { |
|
return cachedScrollbarWidth; |
|
} |
|
|
|
const scrollbarWidth = isMobile(window.innerWidth) ? 0 : getActualScrollbarWidth(); |
|
cachedScrollbarWidth = scrollbarWidth; |
|
|
|
return scrollbarWidth; |
|
};
|
|
|