30 lines
828 B
TypeScript
30 lines
828 B
TypeScript
|
//在需要的页面单独引入,不然会影响全局
|
||
|
import { onMounted, onBeforeUnmount } from 'vue'
|
||
|
|
||
|
export function useFlexibleRem() {
|
||
|
let originFontSize = ''
|
||
|
let resizeHandler: (() => void) | null = null
|
||
|
|
||
|
const setRemBase = () => {
|
||
|
const html = document.documentElement
|
||
|
const width = window.innerWidth
|
||
|
html.style.fontSize = (width / 1920) * 16 + 'px'
|
||
|
}
|
||
|
|
||
|
onMounted(() => {
|
||
|
// 记录原始 font-size
|
||
|
originFontSize = document.documentElement.style.fontSize
|
||
|
setRemBase()
|
||
|
resizeHandler = setRemBase
|
||
|
window.addEventListener('resize', resizeHandler)
|
||
|
})
|
||
|
|
||
|
onBeforeUnmount(() => {
|
||
|
// 离开页面时恢复原始 font-size
|
||
|
document.documentElement.style.fontSize = originFontSize
|
||
|
if (resizeHandler) {
|
||
|
window.removeEventListener('resize', resizeHandler)
|
||
|
}
|
||
|
})
|
||
|
}
|