HTML
DOM
- 文档对象模型,包含文档、节点、和元素
- 所有的元素都是节点,但是节点还包含注释、文本等
- 常用DOM操作:querySelector、appendChild、removeChild等
BOM
- 浏览器对象模型,主要提供了一些浏览器对象
- 包含window、navigator、history、screen、location、frame等
事件模型
- addEventListener 方法用于添加事件,removeEventListener或者通过AbortController对象可以删除事件
- 事件执行顺序为先捕获阶段 -> 目标元素 -> 冒泡阶段
- e.preventDefault 方法用于阻止默认事件
- e.stopPropagation 方法用于阻止事件冒泡
- 将监听事件绑定到父元素以实现对多个子元素的同时监听,该方式被称为事件委托,好处是可以节省内存,只需要绑定一次事件
HTML5
- 新增语义化标签:header、footer、section、video、audio等
- video
- video 可以直接使用src属性,也可以在子元素 source 中使用 src 属性
- 当有多个 source 子元素时,会默认使用第一个能加载成功得到资源播放
- controls 用于控制播放工具栏
- crossorigin 用于控制跨域,属性值表示是否携带认证信息
- loop、muted、poster 等属性表示字面意思
- preload 支持 none不预加载、metadata 预加载媒体的元数据、auto 预加载整个视频
- 支持监听的重点事件:loadeddata、pause、play、seeking、ended
- 可以使用的开源工具:video.js
- audio
- 用法和属性与video类似
- duration 表示音频文件的长度
- currentTime 表示当前的播放时间点
- 可以使用的开源工具:howler.js
- canvas
- 生成的是位图,受屏幕分辨率影响,默认宽高为300/150
- 需要获取canvas元素,然后通过 getContext 获取上下文
- 常用方法有moveTo、lineTo、stroke、rect、fillRect、clearRect等
- drawImage 方法用于渲染图片,toDataURL 方法可以将画布内容转成 Data URI
- 通过 CSS 样式设置宽高为 canvas 宽高的一半来解决模糊问题
- 优化手段1(减少绘制量):减少重绘区域(如局部绘制)、分层绘制(区分静态元素和动态元素)、避免浮点数(小数坐标会进行抗锯齿处理)。
- 优化手段2(内存角度):使用对象池(预先创建对象,避免频繁创建和销毁)、使用离屏canvas(在Worker线程中处理复杂的计算)
- 优化手段3(动画角度):使用requestAnimationFrame(浏览器优化渲染时机),使用节流等(如在滚动或缩放中)
- 优化手段4(硬件加速):复杂的绘制,可以使用webGL进行,如three.js。(CPU降低,但是内存占用更高)
- svg
- 生成的是矢量图,可自由缩放,由标签组成,可以在标签上绑定事件
- 常用元素有 rect、text、path、line、circle、g、foreignObject
- svg 的width和height属性定义svg的宽高,viewBox设置画布中展示的内容大小
- history
- 用于操作浏览器在标签页访问的会话历史记录
- 提供了back、forward、go、pushState、replaceState等方法
- 支持popstate事件,用于监听history发生的变化
- hisotry对象无法复写,且历史记录存在上限
- pushState和replaceState是不会触发popstate事件的,因此在路由里需要手动去触发页面或者组件渲染
- geolocation
- navigator.geolocaiton 主要通过 getCurrentPosition 方法获取当前地理位置信息
- 包含经纬度、海拔、移动速度、方向等信息
- 通过 watchPosition 方法监听变化,clearWatch 清除
- 本地存储
- localStorage
- 持久化存储,不手动删除或者清除浏览器缓存的话会一直存在
- 存储空间可以达到5M,所有内容都是以key value字符串的形式存储
- 提供 setItem、getItem、removeItem、clear等方法
- Cookie
- 由服务端返回Set-Cookie的header设置,在前端也可以通过document.cookie设置
- document.cookie 无法访问带有 HttpOnly 的 Cookie
- 存储空间为 4KB,由 max-age 或者 expires 设置过期时间
- sessionStorage
- 在当前浏览器窗口session时间内存在,关闭窗口后丢失
- 存储空间和操作的API与localStorage一样
- IndexedDB
- 在浏览器端实现的一种事务性数据库,以文件的形式存储在用户本地
- 只要本地磁盘空间足够,就可以一直存储
- 清除浏览器缓存时,不会清除数据,除非手动删除数据库
- 存在同源限制,只能访问自身域名下的数据库
- open 链接数据库;createObjectStore 建表;createIndex 创建索引
- 修改、查看、删除数据时需要先创建事务,之后选择表并添加数据
- 所有的操作都提供了 onsuccess 和 onerror 的事件
- 并发采用悲观锁,保证事务性。
- MongoDB 是一个基于文档的数据库,每个文档都是一个 JSON 对象,支持复杂的查询和索引,使用乐观锁机制,支持高并发。
- localStorage
标签
- link
- 用于加载外部链接的元素,通常用于加载CSS和favicon文件
- 通过设置 ref="preload" 或者 ref="prefetch",配合 as 属性可以加载其他类型的文件
- script
- async 并行的请求脚本,并尽快解析和执行
- crossorigin 跨域的设置,anonymous 跨域设置为 ‘same-origin’,use-credentials 是否包含用户凭据
- defer 异步加载脚本不阻塞文档解析,但是阻塞 DOMContentLoaded 事件
- async 和 defer 的区别是,async 异步加载完成后还是会阻塞文档的解析,但是defer不会
- referrerpolicy 用于设置加载脚本请求的 Referer 头,默认只有HTTPS会发送 Referer 头
- type="module" 用于 ES Module 的形式加载和使用脚本
- viewport meta
- 浏览器显示页面的可视区域,主要用于适配不同尺寸屏幕
- 物理像素指设备屏幕中的实际像素值,逻辑像素指CSS设定的像素值,设备像素比 devicePixelRatio = 物理像素 / 逻辑像素
- width=device-width 设置视窗宽度为设备物理像素宽度
- initial-scale 初始的缩放值
- minimum-scale 和 maximum-scale 表示最大最小的缩放值
- user-scaleable 是否允许用户手动缩放页面
手机屏幕适配方案
- 核心目的:能让页面在不同尺寸的屏幕上保持体验一致性,
- 挑战性:手机尺寸和设备像素比有不同的差异
- 基础设置:使用viewport meta 标签设置宽度为设备宽度,禁止页面缩放
- 布局设置:使用百分比、flexbox、grid等布局方式,避免使用固定像素值。通常会使用rem或者vw作为单位
- 由于设计稿通常是以px为单位,所以需要使用插件将设计稿转换为rem或vw,如px2rem,px2vw等 ,rem和vw的计算方式是基于根元素的字体大小或者视口宽度,因此需要在CSS中设置好根元素的字体大小
- 1px边框问题:可以使用伪元素缩放或者box-shadow来实现更清晰的边框效果