javascript - (PureJS/CSS) 隐藏 div 标签之间的淡入淡出
问题描述
正如标题所示,我试图让我隐藏的 div 在选项卡之间淡出。
我不确定我问的是否合乎逻辑,所以澄清一下:
0 to 1
在选项卡(隐藏的 div)之间切换时,页面将在它们之间淡入淡出,不仅仅是0 to 1 to 0
从一页到另一页。那有意义吗?
我的 JS 看起来像这样:
function btns(evt, btnName) {
var i, containerMain, tablinks;
containerMain = document.getElementsByClassName("containerMain");
for (i = 0; i < containerMain.length; i++) {
containerMain[i].style.display = "none";
}
tablinks = document.getElementsByClassName("tablinks");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" active", "");
}
document.getElementById(btnName).style.display = "block";
evt.currentTarget.className += " active";
for (i = 0; i < containerMain.length; i++) {
containerMain[i].scrollLeft = 0;
containerMain[i].scrollTop = 0;
}
}
虽然我的 CSS 看起来像这样:
.containerMain {
font-family: 'Nunito', sans-serif;
letter-spacing: 1px;
font-size: 11px;
display: none;
position: relative;
height: 285px;
width: 440px;
border: 0px solid #ccc;
overflow: auto;
text-align: justify;
padding: 0px 8px 0 2px;
margin: 10px 0 0 10px;
animation: fadeEffect 1s;
}
@-webkit-keyframes fadeEffect {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@keyframes fadeEffect {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
这是所需结果的示例,只有这个小提琴使用 jQuery
这是我的小提琴,它使用纯 JS
P/S:我对 JavaScript 或任何脚本语言仍然很陌生。
解决方案
诀窍在于状态和转换的组合。在这种情况下,状态是 CSS 类。在 CSS 中,您可以定义是否显示或隐藏元素。通过添加和删除类,您可以切换和/或选择这些状态。
像下面 CSS 中的示例一样创建这些状态。这也使您的 CSS 和 HTML 保持分离。这是构建网站的好习惯,但也可以是个人喜好。
transition
使用该属性代替动画。这将逐渐改变被改变的值。所以在这种情况下,opacity
将在给定的持续时间内从0
to1
和 from 1
to变化。道具不会动画,但会等待不透明度完成,然后再更改其自身的值0
。visibility
.containerMain {
font-family: 'Nunito', sans-serif;
letter-spacing: 1px;
font-size: 11px;
display: none;
position: relative;
height: 285px;
width: 440px;
border: 0px solid #ccc;
overflow: auto;
text-align: justify;
padding: 0px 8px 0 2px;
margin: 10px 0 0 10px;
}
/**
* Hidden state.
* Hide element by default.
*/
.containerMain {
opacity: 0;
visibility: hidden;
transition-property: opacity, visibility;
transition-duration: 1s;
}
/**
* Active state.
* Show element on active class.
*/
.containerMain.active {
opacity: 1;
visibility: visible;
}
在 JavaScript 中使用Element.classList.add
和Element.classList.remove
操作元素上的类。它们使添加或删除某个类变得容易得多。
在下面的代码片段中,循环将首先active
从面板中删除所有类,这将使它们淡出,然后将active
类添加到新选择的元素中,它将淡入。
function btns(evt, btnName) {
var i, containerMain, tablinks;
containerMain = document.getElementsByClassName("containerMain");
tablinks = document.getElementsByClassName("tablinks");
for (i = 0; i < containerMain.length; i++) {
containerMain[i].classList.remove('active');
}
for (i = 0; i < tablinks.length; i++) {
tablinks[i].classList.remove('active');
}
document.getElementById(btnName).classList.add('active');
evt.currentTarget.classList.add('active');
for (i = 0; i < containerMain.length; i++) {
containerMain[i].scrollLeft = 0;
containerMain[i].scrollTop = 0;
}
}
如果您有任何问题,请告诉我。
推荐阅读
- arrays - 在 Julia 中检查随机样本组件的身份
- java - 我的键绑定没有在 JPanel 中执行它的操作
- java - 当我单击按钮时,按钮上的动作侦听器会一直循环,直到我停止代码才会停止
- python - 迄今为止的pyspark字符串
- c++ - 用 C++ 中的函数生成函数
- ios - Obj-C - iPhone 12 - CFURLRequestSetHTTPCookieStorageAcceptPolicy_block_invoke:不再实现,不应调用
- android - Android 应用程序中的数据到 Kafka
- android - 使用通用图像加载器的图像缓存问题
- python - Selenium Webdriver Python - 如何在随机更改的 JS 按钮中单击正确的数字?
- python - 如何在字典类型上使用 str.format()?