MediaQueryList全解析 #78
zhangyu1818
announced in
zh-cn
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
什么是MediaQueryList
一个
MediaQueryList对象在一个document上维持着一系列的媒体查询,并负责处理当媒体查询在其document上发生变化时向监听器进行通知的发送。如果你需要以编程方式来检测一个
document上的媒体查询的值的变化,这个MediaQueryList对象使得通过观察其document而检测它的媒体查询的值的变化成为可能,而不是周期性地对这些媒体查询的值进行检查。简单来说,
MediaQueryList就是提供给JavaScript进行媒体查询的方法兼容性方面也挺好
先来看看
MediaQueryList的属性和方法属性
matches返回媒体查询的结果media返回媒体查询的内容onchange媒体查询状态变化时触发的事件方法
addListener()当媒体查询状态变化时触发的自定义回调removeListener()移除自定义回调matches
matches是MediaQueryList的只读属性,返回一个布尔值,当媒体查询匹配时返回ture,反之false先要创建一个
MediaQueryList对象通过
matches属性获取媒体查询的结果通过这个方式可以很容易的判断当前系统的主题
在实现页面主题的切换功能时可以用到
media
media属性会返回填写的媒体查询匹配规则addListener/removeListener
addListener添加自定义回调,在媒体查询的状态改变时会调用回调在页面加载完成后,不会触发此回调,一定得手动拖动窗口大小后才会触发
有小伙伴就要问了,
onchange属性呢,且容我细细道来onchange
先来看代码
在Chrome上一切正常,然而在Safari上毫无反应
在看看Can i use
为什么兼容性突然就变成这样了?
在使用
addListener的时候,我发现了在Webstorm里addListener居然划了横线标注了废弃的方法不仅
addListener,removeListener也废弃了,同时发现了两个新方法addEventListener和removeEventListeneraddEventListener/removeEventListener
addEventListener的使用方式和DOM2级事件绑定方式相同在Chrome上一切正常,在Safafi上就报错了
mql.addEventListener is not a function,这也许能解释为什么onchange兼容性不好了同时我发现,使用
addListener方法添加的事件,参数e在Chrome上和Safari上也是两个不同的东西在Chrome上,它是一个
Event对象,在Safari上只是包含了matches和media属性的对象,在看看兼容性看上去Chrome也是才支持的
在MDN上是这样写的
我想这只是为了规范化吧,看来新的浏览器Chrome 80也不够新啊,还是老老实实看着标灰划个线用
addListener就行了参考资料:
MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/MediaQueryList
Beta Was this translation helpful? Give feedback.
All reactions