javascript - JavaScript 中的 Window.matchMedia 不起作用
问题描述
我有一个 HTML、CSS 和 JavaScript 文件。HTML 包含三个引号,每两秒随机播放一次。我编写了 JavaScript 代码,仅当屏幕宽度最多为 600 像素时才显示这些引号。问题是报价继续显示在每个屏幕宽度上。我尝试在 CSS 中使用媒体查询,但无济于事。可能是什么问题?请看下面的代码。
HTML 代码:
<div class="preNavBar">
<div class="quoteWrapper">
<span class="quote">The roots of education are bitter, but the fruit is sweet. </span>
<span class="quoteAuthor">— Aristotle</span>
</div>
<div class="quoteWrapper">
<span class="quote">To teach is to learn twice. </span>
<span class="quoteAuthor">— Unknown</span>
</div>
<div class="quoteWrapper">
<span class="quote">A person who won't read has no advantage over one who can't read. </span>
<span class="quoteAuthor">— Mark Twain</span>
</div>
</div>
CSS 代码:
body {
padding: 0 !important;
margin: 0 !important;
font-size: 16pxm;
background: rgb(53, 54, 58);
}
* {
box-sizing: border-box;
/* margin: 0; */
padding: 0;
}
/* PRE-NAVIGATION BAR */
.preNavBar {
background-color: navy;
color: white;
padding: 10px 30px;
display: grid;
justify-content: center;
}
.preNavBar .quoteAuthor {
font-weight: bolder;
float: right;
}
@media only screen and (min-width: 768px) {
/* .preNavBar .quoteWrapper{
display: none;
} */
}
JavaScript 代码:
<script>
let x = window.matchMedia("(max-width: 600px)");
if (x.matches) {
showQuote();
function showQuote() {
let slides = document.getElementsByClassName("quoteWrapper");
let i;
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
let min = 0;
let max = slides.length - 1;
let randNum = Math.floor(Math.random() * (max - min + 1)) + min;
slides[randNum].style.display = "block";
setTimeout(showQuote, 2000); // change every 2 seconds
}
}
</script>
解决方案
让我们看一下第一行:
let x = window.matchMedia("(max-width: 800px)");
您调用window.matchMedia
并将返回值存储在x
.
这里重要的是,x
如果屏幕在声明后调整大小,它不会改变。
如果你愿意,你需要一个resize 事件监听器。
此外,这里可能存在的一个陷阱是,根据您的<script>
标签在文档中的位置,您可能希望将所有代码包装到IIFE中,以确保它在文档完全加载后触发。
推荐阅读
- java - 即使条件为真,为什么我的方法返回 false?
- javascript - 如何删除网页中的特定类?
- python - 如何检查多对多相关字段是否包含所有给定值
- css - 动态加载外部css资源模型端
- r - 数据有 101 个值 为什么结果有 303 个值?
- sapui5 - Sapui5 路由器在 Master Detail App 中第二次无法正常工作
- javascript - React/Material 使用 withStyles 将元素悬停在其上时隐藏它的子元素
- javascript - 如何删除 _id 属性?
- javascript - 为不允许的站点启用复制和粘贴
- r - 使用 cumsum 的输出差异