事件侦听器和转换 JS
Event listeners and transitions JS
我尝试使用事件侦听器(点击)来更改几个元素的不透明度,每次点击时属性都会切换。我不知道为什么我的代码不工作,也找不到我的错误,所以我需要帮助。
window.addEventListener("load", function() {
document.querySelector(".hamburger").addEventListener("click", function(e) {
const con = document.querySelector(".con");
const links = document.querySelectorAll(".nav-link");
if (!con.classList.contains("js")) {
con.classList.toggle("con-js");
//forEach link (in const links) toggle the "link-toggle" class
}
})
})
.con-js {
width: 100%;
overflow: hidden;
}
.con ul li a {
opacity: 0;
/*transition for the opacity: opacity .8s 1s*/
}
.link-toggle {
opacity: 1;
/*transition for the opacity: opacity .3s 0s;*/
}
<div class="hamburger" ">
<!--Hamburger Content-->
</div>
<div class="con ">
<ul>
<li><a href="index.html " class="nav-link ">A</a></li>
<li><a href="menu.html " class="nav-link ">B</a></li>
<li><a href="# " class="nav-link ">C</a></li>
</ul>
</div>
您需要使用 querySelectorAll 而不是 querySelector,它只会 select 它遇到的第一个匹配元素。
https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll
希望对您有所帮助! :)
解决方案是 CSS 选择器的特殊性。
给定选择器 .con ul li a
,为了能够应用 opacity: 1
,您应该将选择器 .link-toggle
更改为 .con ul li a.link-toggle
。
否则,opacity: 0;
将更具体并用于代替 opacity: 1;
。
.con ul li a.link-toggle {
opacity: 1;
/*transition for the opacity: opacity .3s 0s;*/
}
编辑:为了切换 class,querySelectorAll
可以解决问题:
window.addEventListener("load", function() {
document.querySelector(".hamburger").addEventListener("click", function(e) {
const con = document.querySelector(".con");
if (!con.classList.contains("js")) {
con.classList.toggle("con-js");
const links = document.querySelectorAll(".nav-link");
for(const link of links){
link.classList.toggle("link-toggle");
}
}
})
})
问题是你把 class "nav2-link-con-js".
你在 css 中没有这样的 class 而这里 (! сon.classList.contains ("js")) 你是只寻找 class "js".
您需要修复 class "nav2-link-con-js".
我会这样做:
window.addEventListener("load", function() {
document.querySelector(".hamburger").addEventListener("click", function(e) {
const con = document.querySelector(".con");
con.classList.toggle("nav2-link-con", con.classList.contains("js"));
con.classList.toggle("js", !con.classList.contains("js"));
})
})
我尝试使用事件侦听器(点击)来更改几个元素的不透明度,每次点击时属性都会切换。我不知道为什么我的代码不工作,也找不到我的错误,所以我需要帮助。
window.addEventListener("load", function() {
document.querySelector(".hamburger").addEventListener("click", function(e) {
const con = document.querySelector(".con");
const links = document.querySelectorAll(".nav-link");
if (!con.classList.contains("js")) {
con.classList.toggle("con-js");
//forEach link (in const links) toggle the "link-toggle" class
}
})
})
.con-js {
width: 100%;
overflow: hidden;
}
.con ul li a {
opacity: 0;
/*transition for the opacity: opacity .8s 1s*/
}
.link-toggle {
opacity: 1;
/*transition for the opacity: opacity .3s 0s;*/
}
<div class="hamburger" ">
<!--Hamburger Content-->
</div>
<div class="con ">
<ul>
<li><a href="index.html " class="nav-link ">A</a></li>
<li><a href="menu.html " class="nav-link ">B</a></li>
<li><a href="# " class="nav-link ">C</a></li>
</ul>
</div>
您需要使用 querySelectorAll 而不是 querySelector,它只会 select 它遇到的第一个匹配元素。
https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll
希望对您有所帮助! :)
解决方案是 CSS 选择器的特殊性。
给定选择器 .con ul li a
,为了能够应用 opacity: 1
,您应该将选择器 .link-toggle
更改为 .con ul li a.link-toggle
。
否则,opacity: 0;
将更具体并用于代替 opacity: 1;
。
.con ul li a.link-toggle {
opacity: 1;
/*transition for the opacity: opacity .3s 0s;*/
}
编辑:为了切换 class,querySelectorAll
可以解决问题:
window.addEventListener("load", function() {
document.querySelector(".hamburger").addEventListener("click", function(e) {
const con = document.querySelector(".con");
if (!con.classList.contains("js")) {
con.classList.toggle("con-js");
const links = document.querySelectorAll(".nav-link");
for(const link of links){
link.classList.toggle("link-toggle");
}
}
})
})
问题是你把 class "nav2-link-con-js".
你在 css 中没有这样的 class 而这里 (! сon.classList.contains ("js")) 你是只寻找 class "js".
您需要修复 class "nav2-link-con-js".
我会这样做:
window.addEventListener("load", function() {
document.querySelector(".hamburger").addEventListener("click", function(e) {
const con = document.querySelector(".con");
con.classList.toggle("nav2-link-con", con.classList.contains("js"));
con.classList.toggle("js", !con.classList.contains("js"));
})
})