使用 JS 点击显示/隐藏 div 及介绍
我对前端 Web 开发领域还很陌生,我只学习了大约一个半月的 HTML/CSS,学习 JS 的时间只有大约一周或更短。因为我想练习从不同网站学到的知识,所以我自己做了一个网站来测试我的知识。如果我问了太多问题,我想提前道歉,但我认识的人中没有人可以和我分享编码问题。
所以我想(仅用于测试)制作一个显示/隐藏 div,当您使用 JS 单击按钮时会激活该 div。我可以让它显示,但我想尝试使用“if/else”函数让它隐藏/显示。我以为我的代码是正确的,但它似乎不起作用,我找不到解决方案。我将与您分享我的代码(实际上我遇到问题的部分),如果您能帮助我找到解决方案,我将不胜感激。
HTML :
<button type="button" onclick="slide()" >Click Me</button>
<div class="divtest" id="dropdown">
<span>If you are seeing this, then your JS worked! </span>
</div>
CSS(有些东西是没有意义的,我只是想加进去测试一下):
.divtest {
position: absolute;
left: 25%;
bottom: 30px;
width: 50%;
height: 100px;
border: 2px solid black;
box-sizing: border-box;
box-shadow: 5px 5px 10px 3px;
text-align: center;
padding: 40px;
margin: 0 auto;
font-family: Cooper, sans-serif;
font-weight: 100;
transition: 1s ease;
background-color: limegreen;
color: black;
display: none;
}
button {
position: absolute;
width: 50%;
left: 25%;
bottom: 130px;
padding: 10px;
border: 2px solid black;
background-color: limegreen;
box-shadow: 5px 5px 50px 3px;
color: black;
cursor: pointer;
font-family: Cooper, sans-serif;
font-weight: 100;
}
JS:
<script>
function slide() {
var drop = document.getElementById("dropdown"); // declares the element with id="dropdown" as a var
var dropSetting = drop.style.display; // declares that the variable "drop"'s display property is also a variable
if (dropSetting == "none") { // if the current value of display = "none" ( which it is as u can see in the CSS)
dropSetting == "block"; // Then set it to "block"
}
else { // if the value of display != none
dropSetting == "none"; // then set it to "none"
}
}
</script>
如果您对代码或其他内容有任何疑问,请随时提问,因为这是我的测试网站中包含的单独功能,因此它与其他元素/属性没有任何关联。我首先以另一种方式尝试了此代码(不将 dropSetting 声明为 var,只是在 if/else 函数中添加了几行),但它仍然不起作用。我认为 JS 不会将“style.display”识别为属性,因为 Brackets 没有突出显示它。提前感谢您的时间,我希望很快我也能够用我所知道的知识帮助一些人!
另外 - 一个附带问题 - 您对树屋的看法是什么?我听说过很多关于它们的好话,我正在考虑报名以进一步了解它们。
祝您有美好的一天!
为了代码兼容性,请尝试使用方法,不要使用快捷方式,对于属性使用:
var drop = document.getElementById("dropdown");
drop.setAttribute('style', 'display: block');
var display = drop.getAttribute('display'); //Here is all the inline css, better do like below:
为了获得干净、更快的代码,最好编写所有需要的 css 类:
.hide{
display:none;
}
JS:
drop.classList.add('hide');
drop.classList.remove('hide');
drop.classList.toggle('hide');
从未使用过 Treehouse,但对我自己来说,最好的老师是一个好的 Web IDE,例如 VScode 的 Atom、谷歌 Chrome 控制台(F12),这些都是你的书:
- http://www.w3schools.com/js/js_examples.asp
- https://developer.mozilla.org/en-US/docs/Web/API/Element
这是您提问的老师: stackoverflow.com
您不需要更多了。
PD:您的逻辑没问题,只是不要习惯使用代码快捷方式,它们可能不适用于所有环境。(例如 elem.attribute 而不是 elem.getAttribute(''))
您的代码无法运行,因为您没有为 display 属性指定适当的值 (block / none)。您使用了比较运算符 ("=="),而不是等号 ("=")。
if (dropSetting == "none") { // if the current value of display = "none" ( which it is as u can see in the CSS)
dropSetting = "block"; // Then set it to "block"
}
else { // if the value of display != none
dropSetting = "none"; // then set it to "none"
}
代码中的“=="”运算符只会返回 true/false,而不会改变 div 的 display 属性。
问题是您的 dropSetting 不是 对象,只是字符串。当您更改它(如果更改)时,您不会更改对象(在本例中为样式)。尝试以下操作:
var drop = document.getElementById("dropdown"); //get reference to the object
drop.style.display = drop.style.display == 'none' ? 'block' : 'none'; //if(...){do something}else{do something else}
另一种可能性:
var dropStyle = document.getElementById("dropdown").style;
if(dropStyle.display == 'none'){
dropStyle.display = 'block';
}else
dropStyle.display = 'none';