MediaQueryList - 存储了应用于文档的媒体查询的信息
这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。
MediaQueryList
对象存储了应用于文档的媒体查询的信息,支持实时和事件驱动来匹配文档的状态。您可以通过在 window
对象上调用 matchMedia()
来创建 MediaQueryList
。当媒体查询状态改变时(即,当媒体查询测试开始或停止评估为 true
时),结果对象处理向监听器发送通知。
这对于自适应设计非常有用,因为这样可以观察文档以检测其媒体查询何时发生更改,而不是定期轮询值,并允许您以编程方式根据媒体查询状态对文档进行更改。
属性
新版本的 MediaQueryList
接口继承了其父接口 EventTarget
的属性。
MediaQueryList.matches
只读
一个 Boolean
,如果 document
当前与媒体查询列表匹配,则返回 true
,否则返回 false
。
MediaQueryList.media
只读
一个DOMString
,表示序列化的媒体查询。
方法
新版本的 MediaQueryList
接口继承了其父接口 EventTarget
的方法。
MediaQueryList.addListener()
向 MediaQueryListener
添加一个监听器,该监听器将运行自定义回调函数以响应媒体查询状态的变化。这基本上是 EventTarget.addEventListener()
的别名,用于向后兼容。
MediaQueryList.removeListener()
从 MediaQueryListener
中删除一个监听器。这基本上是 EventTarget.removeEventListener()
的别名,用于向后兼容。
事件
以下事件被传递到 MediaQueryList
对象:
change
当针对文档运行媒体查询的结果发生更改时,发送到 MediaQueryList
。例如,如果媒体查询是 (min-width: 400px)
,则只要文档的 viewport 的宽度变为小于或大于 400 像素,就会触发 change
事件。也可以使用 onchange
事件处理程序属性来处理。
实例
这个简单的例子创建了一个 MediaQueryList
,然后设置一个监听器来检测媒体查询状态何时发生变化,当它改变页面的外观时运行自定义函数。
var para = document.querySelector('p');
var mql = window.matchMedia('(max-width: 600px)');
function screenTest(e) {
if (e.matches) {
/* 视口宽度为 600 像素或更小 */
para.textContent = '这是一个窄屏幕 - 宽度不到 600px。';
document.body.style.backgroundColor = 'red';
} else {
/* 视口宽度超过 600 像素 */
para.textContent = '这是一个宽屏 - 超过 600px 宽。';
document.body.style.backgroundColor = 'blue';
}
}
mql.addListener(screenTest);
您可以在单个属性和方法页面上找到其他实例。
规范
规范 | 状态 | 备注 |
---|---|---|
CSS Object Model (CSSOM) View Module MediaQueryList 的定义 |
工作草案 | 初始定义 |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 9 | 支持 | 6 | 10 | 12.1 | 5 |
addListener | 9 | 支持 | 6 | 10 | 12.1 | 5 |
matches | 9 | 支持 | 6 | 10 | 12.1 | 5 |
media | 9 | 支持 | 6 | 10 | 12.1 | 5 |
onchange | 支持 | 未知 | 55 | 不支持 | 支持 | 未知 |
removeListener | 9 | 支持 | 6 | 10 | 12.1 | 5 |
EventListener objects as parameters | 不支持 | 未知 | 55 | 不支持 | 不支持 | 未知 |
MediaQueryList inheriting from EventTarget | 支持 | 16 | 55 | 不支持 | 支持 | 支持 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 9 | 9 | 支持 | 未知 | 未知 | 未知 | 未知 |
addListener | 未知 | 未知 | 支持 | 未知 | 未知 | 未知 | 未知 |
matches | 未知 | 未知 | 支持 | 未知 | 未知 | 未知 | 未知 |
media | 未知 | 未知 | 支持 | 未知 | 未知 | 未知 | 未知 |
onchange | 不支持 | 支持 | 未知 | 55 | 未知 | 支持 | 未知 |
removeListener | 未知 | 未知 | 支持 | 未知 | 未知 | 未知 | 未知 |
EventListener objects as parameters | 不支持 | 不支持 | 未知 | 55 | 未知 | 不支持 | 未知 |
MediaQueryList inheriting from EventTarget | 支持 | 支持 | 16 | 55 | 未知 | 支持 | 支持 |