gpt4 book ai didi

javascript - 如何强制匹配的 window.matchMedia 在页面加载时执行?

转载 作者:行者123 更新时间:2023-11-29 17:45:42 26 4
gpt4 key购买 nike

我注意到 css 媒体查询定义和 javascript window.matchMedia 媒体查询定义之间的区别:

CSS 规则最初适用于加载的页面。

javascript 中定义的规则不会在页面加载后执行,而只会在输入新条件后执行。

一个例子:

我有两个具有等效媒体查询定义的不同页面,第一个在 css 中定义,第二个在 javascript 中定义:

css 版本(在样式元素中定义):

@media (min-width: 401px) and (max-width: 600px) { body {background-color: red; } }
@media (min-width: 601px) and (max-width: 800px) { body {background-color: blue; } }

javascript 版本(全局定义或在主体加载后调用的函数中定义):

window.matchMedia("(min-width: 401px) and (max-width: 600px)")
.addListener(function(e) {
if (e.matches) {
document.body.style.background = "red";
}
});

window.matchMedia("(min-width: 601px) and (max-width: 800px)")
.addListener(function(e) {
if (e.matches) {
document.body.style.background = "blue";
}
});

当我加载一个页面并且窗口是 700 像素宽时

  • css版本页面为蓝色
  • javascript 版本是白色的,只有在满足新条件(即窗口大小低于 601 像素)后才会更改其状态。

如何强制匹配的 window.matchMedia 在页面加载时执行?

最佳答案

要在加载时触发 matchMedia,您可以改为这样做(使用稍微更干净的代码库)。

堆栈片段

<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">

<script>
document.addEventListener("DOMContentLoaded", function(e) {

// medias (as an array to make it a little easier to manage)
var mqls = [
window.matchMedia("(max-width: 400px)"),
window.matchMedia("(min-width: 401px) and (max-width: 600px)"),
window.matchMedia("(min-width: 601px) and (max-width: 800px)"),
window.matchMedia("(min-width: 801px)")
]

// event listeners
for (var i=0; i<mqls.length; i++){
mqls[i].addListener(mqh)
}

// matches methods
function mqh(){
if (mqls[0].matches) {
console.log("CALLBACK (max-width: 400px)");
document.body.style.background = "green";
} else if (mqls[1].matches) {
console.log("CALLBACK (max-width: 600px)");
document.body.style.background = "red";
} else if (mqls[2].matches) {
console.log("CALLBACK (max-width: 800px)");
document.body.style.background = "blue";
} else if (mqls[3].matches) {
console.log("CALLBACK (min-width: 801px)");
document.body.style.background = "gray";
}
console.log("window.innerWidth: " + window.innerWidth);
}

// call once on load
mqh();
});

</script>
</head>

<body>
</body>

</html>

组织。来源:http://www.javascriptkit.com/javatutors/matchmediamultiple.shtml

关于javascript - 如何强制匹配的 window.matchMedia 在页面加载时执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49989723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com