重置为代码中的自定义前一点 JAVASCRIPT
Reset to a custom previous point in the code JAVASCRIPT
我正在构建响应式移动菜单。我是初学者,所以不知道如何有效地使用循环。
问题是,在移动视图中,汉堡菜单图标显示,单击它时,它变为关闭菜单图标,再次单击时,变为汉堡菜单。
但它卡在那里。它仅适用于 2 次点击,之后它停留在汉堡菜单图标上,并且永远不会更改为关闭菜单图标。
JAVASCRIPT 代码:
window.addEventListener('resize', function detectWidth(){
let screenWidth = screen.width;
if(screenWidth <= 800){
document.querySelector("nav ul").innerHTML = `<img id="menuIcon" src="Header/menuIcon.png" alt="Menu Icon">`;
// TO SHOW MENU ITEMS & CLOSE MENU ICON AFTER CLICKING ON HAMBURGER MENU BUTTON
document.querySelector("#menuIcon").addEventListener("click", function(){
document.querySelector("#menuIcon").outerHTML = `<img id="closMenuIcon" src="Header/closeMenuIcon.png" alt="Close Menu Icon">`;
//TO CHANGE BACK TO MENU ICON
document.querySelector("#closMenuIcon").addEventListener("click", function () {
document.querySelector("#closMenuIcon").outerHTML = `<img id="menuIcon" src="Header/menuIcon.png" alt="Menu Icon">`;
});
})
} else{
document.querySelector("nav ul").innerHTML = `<ul>
<li><a href="#">Home</a></li>
<li><a href="#">Shop</a></li>
<li><a href="#">About us</a></li>
<li><a href="#">Contact us</a></li>
</ul>`;
}
});
如果很明显,请原谅我,我是初学者,我认为它需要某种循环。
我自己找到了答案。我真的不知道它是如何工作的,但是是的,至少它现在可以工作了。
window.addEventListener('resize', function detectWidth(){
let screenWidth = screen.width;
if(screenWidth <= 800){
document.querySelector("nav ul").innerHTML = `<img id="menuIcon" src="Header/menuIcon.png" alt="Menu Icon">`;
// TO SHOW MENU ITEMS & CLOSE MENU ICON AFTER CLICKING ON HAMBURGER MENU BUTTON
function toggleMenu(){
document.querySelector("#menuIcon").addEventListener("click", function(){
document.querySelector("#menuIcon").outerHTML = `<img id="closMenuIcon" src="Header/closeMenuIcon.png" alt="Close Menu Icon">`;
//TO CHANGE BACK TO MENU ICON
document.querySelector("#closMenuIcon").addEventListener("click", function () {
document.querySelector("#closMenuIcon").outerHTML = `<img id="menuIcon" src="Header/menuIcon.png" alt="Menu Icon">`;
toggleMenu();
});
})
}
toggleMenu();
} else{
document.querySelector("nav ul").innerHTML = `<ul>
<li><a href="#">Home</a></li>
<li><a href="#">Shop</a></li>
<li><a href="#">About us</a></li>
<li><a href="#">Contact us</a></li>
</ul>`;
}
});
尽管使用切换 css className 更好,但我想指出这种情况下的问题。在您的案例场景中,您在按钮元素上应用了事件,但事情是 outerHTML
replaces the element 所以所有事件都会被触发。如果你想坚持你的方法,你需要重新声明一次事件。
我正在构建响应式移动菜单。我是初学者,所以不知道如何有效地使用循环。
问题是,在移动视图中,汉堡菜单图标显示,单击它时,它变为关闭菜单图标,再次单击时,变为汉堡菜单。 但它卡在那里。它仅适用于 2 次点击,之后它停留在汉堡菜单图标上,并且永远不会更改为关闭菜单图标。
JAVASCRIPT 代码:
window.addEventListener('resize', function detectWidth(){
let screenWidth = screen.width;
if(screenWidth <= 800){
document.querySelector("nav ul").innerHTML = `<img id="menuIcon" src="Header/menuIcon.png" alt="Menu Icon">`;
// TO SHOW MENU ITEMS & CLOSE MENU ICON AFTER CLICKING ON HAMBURGER MENU BUTTON
document.querySelector("#menuIcon").addEventListener("click", function(){
document.querySelector("#menuIcon").outerHTML = `<img id="closMenuIcon" src="Header/closeMenuIcon.png" alt="Close Menu Icon">`;
//TO CHANGE BACK TO MENU ICON
document.querySelector("#closMenuIcon").addEventListener("click", function () {
document.querySelector("#closMenuIcon").outerHTML = `<img id="menuIcon" src="Header/menuIcon.png" alt="Menu Icon">`;
});
})
} else{
document.querySelector("nav ul").innerHTML = `<ul>
<li><a href="#">Home</a></li>
<li><a href="#">Shop</a></li>
<li><a href="#">About us</a></li>
<li><a href="#">Contact us</a></li>
</ul>`;
}
});
如果很明显,请原谅我,我是初学者,我认为它需要某种循环。
我自己找到了答案。我真的不知道它是如何工作的,但是是的,至少它现在可以工作了。
window.addEventListener('resize', function detectWidth(){
let screenWidth = screen.width;
if(screenWidth <= 800){
document.querySelector("nav ul").innerHTML = `<img id="menuIcon" src="Header/menuIcon.png" alt="Menu Icon">`;
// TO SHOW MENU ITEMS & CLOSE MENU ICON AFTER CLICKING ON HAMBURGER MENU BUTTON
function toggleMenu(){
document.querySelector("#menuIcon").addEventListener("click", function(){
document.querySelector("#menuIcon").outerHTML = `<img id="closMenuIcon" src="Header/closeMenuIcon.png" alt="Close Menu Icon">`;
//TO CHANGE BACK TO MENU ICON
document.querySelector("#closMenuIcon").addEventListener("click", function () {
document.querySelector("#closMenuIcon").outerHTML = `<img id="menuIcon" src="Header/menuIcon.png" alt="Menu Icon">`;
toggleMenu();
});
})
}
toggleMenu();
} else{
document.querySelector("nav ul").innerHTML = `<ul>
<li><a href="#">Home</a></li>
<li><a href="#">Shop</a></li>
<li><a href="#">About us</a></li>
<li><a href="#">Contact us</a></li>
</ul>`;
}
});
尽管使用切换 css className 更好,但我想指出这种情况下的问题。在您的案例场景中,您在按钮元素上应用了事件,但事情是 outerHTML
replaces the element 所以所有事件都会被触发。如果你想坚持你的方法,你需要重新声明一次事件。