gpt4 book ai didi

javascript - matchMedia/Javascript 媒体查询问题

转载 作者:行者123 更新时间:2023-11-30 20:58:38 25 4
gpt4 key购买 nike

我创建了这个函数来处理我的移动导航的切换。

const mobileNav = document.getElementById('mobile-nav');
let tabs = document.getElementsByClassName('nav_tabs');

//nav toggle control
mobileNav.onclick = (event) => {
event.preventDefault();
for(let i = 0; i < tabs.length; i++) {
if(tabs[i].style.display === "block"){
tabs[i].style.display = "none";
} else {
tabs[i].style.display = "block";
}
}
};

它在移动设备上运行良好。问题是当我调整大小时,切换仍然设置为不显示并且切换的菜单选项不可见。我已尝试使用此 JS 媒体查询根据 786 像素的最小宽度重置显示 block ,但它没有重置菜单。

// media query event handler
if (matchMedia) {
const dsktp = window.matchMedia("(min-width: 768px)");
dsktp.addListener(WidthChange);
WidthChange(dsktp);
}

function WidthChange(elem) {
for(let i = 0; i < elem.length; i++) {
tabs[i].style.display = "block";
}
}

这是一个 codepen的问题。

最佳答案

您的代码因为这段代码而无法运行(注意注释):

if (matchMedia) {
const dsktp = window.matchMedia("(min-width: 768px)");
dsktp.addListener(WidthChange); // <-- add function as handler
WidthChange(dsktp);
}

function WidthChange(elem) { // elem argument it is not the dom elements here
for(let i = 0; i < elem.length; i++) {
tabs[i].style.display = "block";
}
}

所以你应该这样重写你的代码:

if (matchMedia) {
const dsktp = window.matchMedia("(min-width: 768px)");
dsktp.addListener(WidthChange);
WidthChange(dsktp);
}

function WidthChange(mediaQueryEvent) {
for(let i = 0; i < tabs.length; i++) {
tabs[i].style.display = mediaQueryEvent.matches ? "block" : "none";
}
}

查看我的 fork of your pen .

关于javascript - matchMedia/Javascript 媒体查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47360779/

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