如果显示等于具有平滑动画 JQuery 的块,则设置特定元素的样式



我将W3学校的这段代码用于我的可折叠部分,它运行良好,现在我想向下滑动"打开第1部分按钮"(边距顶部:10px如果第一部分"打开第1部分内容"被隐藏(不显示(。我知道并理解这是一项非常简单的任务,但对 JS 来说是一个新的任务,我很难弄清楚只有在满足某些条件时才如何应用 css dimamicaly(如果显示块,则将其恢复为边距顶部:0(。

正如我所说,我尝试了不同的方法,它们弄乱了原始的 W3 JS 代码,如果我应用其他内容并在上面提到显示,它就会停止工作。

如果只有一个元素更改了他的状态,只需要定位一个元素(显示块 - 到无;无 - 阻止(。

如果可能的话,我想在元素上下移动时添加一些动画

如果所有可折叠部分等于显示无,脚本将激活另一个带有图像的隐藏div(之前未提及(,如果此部分中的任何部分等于显示块,则会将其隐藏,那就太好了。

任何帮助将不胜感激

(我有三个可折叠的按钮,每个按钮都有一个三个按钮,就像 W3 示例中一样简单(

var coll = document.getElementsByClassName("collapsible");
var i;
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.display === "block") {
content.style.display = "none";
} else {
content.style.display = "block";
}
});
}
.collapsible {
background-color: #777;
color: white;
cursor: pointer;
padding: 18px;
width: 100%;
border: none;
text-align: left;
outline: none;
font-size: 15px;
}
.active, .collapsible:hover {
background-color: #555;
}
.content {
padding: 0 18px;
display: none;
overflow: hidden;
background-color: #f1f1f1;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<p>Collapsible Set:</p>
<button class="collapsible">Open Section 1</button>
<div class="content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>
<button class="collapsible">Open Section 2</button>
<div class="content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>
<button class="collapsible">Open Section 3</button>
<div class="content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>
</body>
</html>

您可以创建一个函数,该函数将第一部分的margin-top设置为10px,如果其下一个元素同级的显示未被阻止,并在页面加载和显示内容时执行该函数。要使元素平滑地对上边距进行动画处理,可以将transition: margin 0.5s添加到.collapsible

.collapsible {
background-color: #777;
color: white;
cursor: pointer;
padding: 18px;
width: 100%;
border: none;
text-align: left;
outline: none;
font-size: 15px;
transition: margin 0.5s;
}
.active, .collapsible:hover {
background-color: #555;
}
.content {
padding: 0 18px;
display: none;
overflow: hidden;
background-color: #f1f1f1;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<p>Collapsible Set:</p>
<button class="collapsible">Open Section 1</button>
<div class="content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>
<button class="collapsible">Open Section 2</button>
<div class="content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>
<button class="collapsible">Open Section 3</button>
<div class="content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>
<script>
var coll = document.getElementsByClassName("collapsible");
var i;
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.display === "block") {
content.style.display = "none";
} else {
content.style.display = "block";
}
moveSection();
});
}
function moveSection(){
var section1 = coll[0];
if(section1.nextElementSibling.style.display!="block"){
section1.style.marginTop = "10px";
} else {
section1.style.marginTop = "";
}
}
moveSection();
</script>
</body>
</html>

最新更新