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
-
什么是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
和removeEventListener
addEventListener/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