请问为什么要监听DOMContentLoaded事件,然后设置 html 的font-size呢?
来源:6-5 动态 rem 基准+修正 tailwind,完善移动端navigationBar

吕士杰
2022-06-16
export const useREM = () => {
// 定义最大的fontSize
const MAX_FONT_SIZE = 40
// 监听 html 文档被解析完成的事件
document.addEventListener('DOMContentLoaded', () => {
// 拿到 html 标签
const html = document.querySelector('html')
// 计算 fontSize,根据屏幕宽度 / 10
let fontSize = window.innerWidth / 10 // 包含滚动条的宽度
fontSize = fontSize > MAX_FONT_SIZE ? MAX_FONT_SIZE : fontSize
html.style.fontSize = fontSize + 'px'
})
}
当一个 HTML 文档被加载和解析完成后,DOMContentLoaded 事件便会被触发。我查了DOMContentLoaded的触发具体时间,主要解释是:
1、当文档中没有脚本时,浏览器解析完文档便能触发 DOMContentLoaded 事件
2、如果文档中包含脚本(async或defer脚本除外),则脚本会阻塞文档的解析
3、脚本需要等 CSSOM 构建完成才能执行
这样看,DOMContentLoaded 至少要等到cssom构建完毕后再能触发,然后在触发的回调函数里设置font-size大小。如果存在非一部的js脚本,还需要等待更长时间。
综上,useREM是不是不放在DOMContentLoaded事件的回调函数里更妥当呢?
是否直接放在head 标签里更加好?
写回答
1回答
-
你好
很多时候业务代码的逻辑处理并非越靠前越好,更多的时候我们需要考虑代码可维护性。
在 大型项目中,并不建议把复杂逻辑直接通过 script 进行引入。
032022-12-25
相似问题
我这里配置了暗黑模式没反应
回答 3