JavaScript通过window.matchMedia()监听媒体查询变化实现响应式行为,支持动态切换UI、资源加载和交互逻辑,需与CSS断点保持一致并及时清理监听器。

JavaScript 本身不直接实现响应式设计,但能动态响应媒体查询的变化,补足 CSS 媒体查询的静态局限。核心在于用 window.matchMedia() 监听断点变化,再执行对应逻辑,比如切换菜单、加载不同资源、调整组件行为等。
用 matchMedia 监听断点变化
window.matchMedia() 返回一个 MediaQueryList 对象,可主动查询当前是否匹配某媒体查询,也能监听变化:
- 调用
matchMedia("(max-width: 768px)").matches立即获取当前状态(true或false) - 用
.addEventListener("change", handler)在断点跨越时触发回调(现代写法,兼容性好) - 旧版可用
.addListener(handler),但已废弃,建议统一用addEventListener
示例:在移动视口下显示侧边栏按钮,桌面下自动展开
const mobileQuery = window.matchMedia("(max-width: 768px)");
function handleMobileChange(e) {
if (e.matches) {
document.body.classList.add("mobile");
document.getElementById("sidebar").style.display = "none";
} else {
document.body.classList.remove("mobile");
document.getElementById("sidebar").style.display = "block";
}
}
mobileQuery.addEventListener("change", handleMobileChange);
handleMobileChange(mobileQuery); // 初始化一次
登录后复制
与 CSS 媒体查询保持一致
JavaScript 中的断点值必须和 CSS 中完全一致(包括单位、括号、空格),否则容易因微小差异导致状态不同步:
立即学习“Java免费学习笔记(深入)”;
标签: css javascript java js svg 编码 懒加载 ssl ai win 响应式设计
还木有评论哦,快来抢沙发吧~