matchMedia("(min-width: 500px)").addListener(foo);
这段代码的作用是什么?addListener()
函数在这里有什么作用?当视口宽度改变时,它是否执行函数foo()
?
matchMedia("(min-width: 500px)").addListener(foo);
这段代码的作用是什么?addListener()
函数在这里有什么作用?当视口宽度改变时,它是否执行函数foo()
?
是的,它执行了foo
函数
当媒体查询的计算结果发生变化时。
(来自MDN)
在您的情况下,这意味着如果您从宽度大于500px的窗口开始,然后将其调整为小于500px,则该函数将执行。如果稍后将其调整回宽度大于500px,则该函数将再次执行。
该函数的第一个参数是MediaQueryListEvent
。它包含布尔值matches
属性,表示您的媒体查询当前是否匹配视口。
foo()
将在媒体查询的评估更改时执行(从true
到false
或从false
到true
)。
matchMedia(...).addEventListener(foo)
和window.onResize(foo)
之间有一个重要的区别。在前者中,只有在媒体查询的评估更改时才会执行foo()
。而在后者中,每次浏览器窗口大小变化时都会重复执行foo()
。如果您针对特定的断点,则需要在执行其他逻辑之前在foo()
中测试这些断点。
matchMedia(...).addEventListener(foo)
允许您在foo()
中编写更加专注的逻辑,而不需要包含额外的逻辑(或其他函数调用)来测试浏览器尺寸或其他可以通过媒体查询进行评估的信息。使用matchMedia(...).addEventListener(foo)
而不是window.onResize(foo)
还可能带来性能上的提升,因为foo()
将被执行得更少。matchMedia.addListener
?因为 addEventListener
接受不同的参数(类型,然后是 foo)。 - Julix
onresize
事件非常相似吗?我的意思是,如果我们已经有了window.onresize
,那么为什么还需要addListener
? - user31782matchMedia
和`addListener更方便。 - Michał Perłakowski