javascript - dropDown 功能 - 多次按下且快速 setTimeout 删除边框时,高度为 500px
问题描述
首先,不,我不会使用 jQuery。
所以,我有这个项目我正在做,我想做一个滑动切换元素。在我快速按下按钮之前,一切都很好。然后边框消失,元素已达到其最终高度(在本例中为 500 像素)。
也许我的解释不是那么准确,但我会给你代码。
var div = document.getElementById('div');
var btn = document.getElementById('button');
function clickFunction(){
if(div.style.height === "0px") {
div.style.height = "500px";
div.style.borderStyle = "solid";
} else {
div.style.height = "0px";
setTimeout(function(){div.style.borderStyle = "none";}, 500);
}
}
btn.onclick = clickFunction;
div#div {
transition: 500ms ease;
width: 100px;
height: 200px;
margin-top: 20px;
}
.container {
width: 120px;
background-color: red;
padding: 8px;
}
<button id="button">
Press me
</button>
<div class="container">
<div id="div" style="border-style: none; border-width: 2px; height: 0px;"></div>
</div>
我也尝试使用 clearTimeout() 但它不起作用。是的,我设置setTimeout
为一个变量,但它没有做任何事情。
有任何想法吗?干杯。
解决方案
您当前的代码使用内联样式和id
选择器的组合,以及由 JavaScript 在if/then
和setTimeout()
回调中更新的内联样式。所有这些说明,再加上客户端重新绘制 UI 的速度,都导致了这个问题。
通过清理切换样式的方法以及首先如何应用样式,指令和时序方面的潜在冲突要少得多。
从 HTML 中删除所有静态样式,并为元素的正常和展开状态设置 CSS 类。然后只需使用该element.classList.toggle()
方法即可无缝切换扩展类的使用。不需要计时器。
var div = document.getElementById('div');
var btn = document.getElementById('button');
btn.addEventListener("click", function(){
div.classList.toggle("expanded");
});
.container {
width: 120px;
background-color: red;
padding: 8px;
}
.normal {
transition: 500ms ease;
width: 100px;
margin-top: 20px;
border:0px solid black;
height: 0px;
}
.expanded {
height: 200px;
border:2px solid black;
}
<button id="button">Press me</button>
<div class="container">
<div id="div" class="normal"></div>
</div>
笔记:
设置id
基于的 CSS 选择器时要小心,因为它们以后很难覆盖。我并不是说永远不要使用它们,但通常情况下,CSS 类提供了最灵活的解决方案并有助于避免 gobs 和 gobs 的内联样式。
推荐阅读
- apache-httpclient-4.x - 两个互联网上的 HttpClient 连接池
- regex - 不允许正则表达式 大写字母后跟小写字母后跟数字后跟特殊字符
- windows - 通过文件夹共享时程序在哪里运行?
- java - Cassandra Key 可能不是空的错误。字节缓冲区
- java - 如何将 Spinner 用作 ACTION 而不是 SELECTION?
- javascript - 如何在 React 中获取通过 dangerouslySetInnerHTML 添加的子标签的引用
- powershell - powershell 中的脚本以在 gpedit(组策略编辑器)中打开和更改值
- javascript - 节点:同时运行2个sql查询
- java - 网络 ObjectOutputStream 中的奇数 ArrayIndexOutOfBoundsException
- web-component - Elm with webcomponents - 这是一个错误还是我做错了什么?