如何通过window.matchMedia在脚本中实现系统尺寸变化的实时响应?

2026-04-30 13:372阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计824个文字,预计阅读时间需要4分钟。

如何通过window.matchMedia在脚本中实现系统尺寸变化的实时响应?

使用 `window.matchMedia` 查询系统减少动态效果开启状态,是最轻量级、最标准的方式。它返回一个 `MediaQueryList` 对象,支持使用 `addEventListener`(注意不是 `onchange`)实时响应系统设置变化。

关键点:媒体查询字符串必须是 (prefers-reduced-motion: reduce),不能漏括号,也不能写成 reducedyes —— 浏览器只认 reduce 这个值。

  • 首次检查用 mql.matches 获取当前状态
  • 监听变更必须用 mql.addEventListener('change', handler),旧版 Safari 也支持,无需降级到 addListener
  • 不要在每次动画前重复调用 matchMedia,复用同一个 MediaQueryList 实例即可

如何在动画逻辑中安全跳过或降级动效

拿到 matches === true 时,不是简单“禁用所有动画”,而是要按场景分级处理:CSS 动画可交由 @media (prefers-reduced-motion: reduce) 控制;JS 驱动的动画(如 requestAnimationFramegsap.toelement.animate())需主动干预。

阅读全文
标签:win

本文共计824个文字,预计阅读时间需要4分钟。

如何通过window.matchMedia在脚本中实现系统尺寸变化的实时响应?

使用 `window.matchMedia` 查询系统减少动态效果开启状态,是最轻量级、最标准的方式。它返回一个 `MediaQueryList` 对象,支持使用 `addEventListener`(注意不是 `onchange`)实时响应系统设置变化。

关键点:媒体查询字符串必须是 (prefers-reduced-motion: reduce),不能漏括号,也不能写成 reducedyes —— 浏览器只认 reduce 这个值。

  • 首次检查用 mql.matches 获取当前状态
  • 监听变更必须用 mql.addEventListener('change', handler),旧版 Safari 也支持,无需降级到 addListener
  • 不要在每次动画前重复调用 matchMedia,复用同一个 MediaQueryList 实例即可

如何在动画逻辑中安全跳过或降级动效

拿到 matches === true 时,不是简单“禁用所有动画”,而是要按场景分级处理:CSS 动画可交由 @media (prefers-reduced-motion: reduce) 控制;JS 驱动的动画(如 requestAnimationFramegsap.toelement.animate())需主动干预。

阅读全文
标签:win