功能

  • requestAnimationFrame 是一种优化动画渲染的 API。
  • 它告诉浏览器在下一次重绘之前执行指定的回调函数,通常用于实现流畅的动画。
  • 和固定时间间隔的 setTimeoutsetInterval 不同,requestAnimationFrame 会自动与浏览器的刷新率同步(如 60Hz,16.67ms 一帧)。

特点

高效:只在页面处于活动状态时执行回调(后台标签页会暂停,节省资源)。
精准:与显示器的刷新率匹配,避免丢帧。
流畅:浏览器会在合适的时间点调用回调,减少卡顿或跳帧现象。

常见场景

实现 DOM 动画
平滑滚动效果
监控动画帧性能

浏览器的 Web Components 中,Class 是用来定义自定义元素的主要方式,自定义元素支持以下生命周期回调方法:

生命周期回调:connectedCallback 和 disconnectedCallback

  1. connectedCallback
    作用:当自定义元素被插入到文档 DOM 中时,浏览器会自动调用该回调。
    用途:
    初始化 DOM 或状态。
    绑定事件监听器。
    触发外部依赖的加载操作。
    典型场景:
    加载数据、动态渲染子组件。
    初始化第三方库(如动画、图表库等)。
class MyElement extends HTMLElement {
    connectedCallback() {
        console.log('元素已插入到 DOM');
        this.innerHTML = '<p>Hello, World!</p>';
    }
}
customElements.define('my-element', MyElement);
  1. disconnectedCallback
    作用:当自定义元素从文档 DOM 中被移除时,浏览器会调用该回调。
    用途:
    清理 DOM 或状态。
    移除事件监听器,释放资源。
    停止定时器或取消网络请求。
    典型场景:
    停止动画或计时器。
    删除与外部环境相关的绑定操作。
class MyElement extends HTMLElement {
    disconnectedCallback() {
        console.log('元素已从 DOM 中移除');
    }
}
customElements.define('my-element', MyElement);

功能

  • performance.now() 是一种高精度的时间测量方法,返回自页面加载以来的毫秒数(包括小数点后3位)。

  • 它的精度远高于 Date.now(),适合用于测量代码性能或事件耗时。

    特点

  • 起点是浏览器的性能时间起点,不会受系统时间调整的影响。

  • 时间以 DOMHighResTimeStamp 类型返回,单位为毫秒。

常见场景

  • 测量代码性能
  • 计算动画帧之间的时间间隔
  • 精准测量事件延迟
特性  @use    @import
模块化 使用命名空间,强模块化 全局导入,容易命名冲突
性能  加载一次,性能更优   每次都会重复导入
CSS 输出  默认不会输出引入文件中的样式  会输出引入文件中的样式
推荐程度    现代 SCSS 标准推荐使用  不推荐,已被逐步淘汰

prefersReducedMotion: () =>
  matchMedia("(prefers-reduced-motion: reduce)").matches,
prefersMotion: () =>
  matchMedia("(prefers-reduced-motion: no-preference)").matches,
···
功能分析
prefersReducedMotion:

检测用户是否启用了减少动画或运动的偏好设置。
如果启用了,matchMedia("(prefers-reduced-motion: reduce)").matches 会返回 true。
表示用户希望减少不必要的动画或视觉运动。
prefersMotion:

检测用户是否没有特别的减少运动偏好(默认允许动画)。
如果没有特别偏好,matchMedia("(prefers-reduced-motion: no-preference)").matches 会返回 true。
表示用户对动画或视觉运动没有限制,可以正常显示动画。

使用 prefers-reduced-motion 的重要性(尤其是在 GSAP 或自定义动画中)
1. 提升用户体验
用户多样性: 有些用户(尤其是有视觉敏感或晕动症倾向的人)会对复杂动画感到不适。
如果忽视这些用户偏好,可能导致糟糕的用户体验,甚至用户放弃使用你的网站。
尊重用户设置: 使用 prefers-reduced-motion 确保动画适配用户需求。