一个接一个地淡出每一个li
Fade in each li one by one
我想逐个淡化每个导航li
。这是我当前的代码。它显示了整个div,现在我想在每个li
中一个接一个地淡入,稍微延迟一点。
$(document).ready(function(){
$("#circleMenuBtn").click(function(){
$("#dropDownMenu").fadeIn(500);
});
});
<div class="sub-menu" id="dropDownMenu">
<ul id="navbar">
<li> First</li>
<li>Second</li>
<li>Third</li>
<li>Fourth</li>
<li>Fifth</li>
</ul>
</div>
.sub-menu {
position: absolute;
z-index: 1000;
color: #fff;
right: 5px;
display: none;
}
我尝试了在一次迭代中在每个li
中淡出的循环,但没有成功。请分享你的想法。
更新:Rory McCrossan的代码非常完美。不幸的是,它与我的代码不兼容,当点击菜单时,它会隐藏菜单。
$(document).mouseup(function (e) {
var container = $("#dropDownMenu");
if (!container.is(e.target)
&& container.has(e.target).length === 0) {
container.fadeOut(500);
}
});
出了什么问题?我刚开始学习JS和JQuery,所以如果这是一个蹩脚的问题,请原谅我。
您可以使用each()
调用以增量循环li
元素和delay()
fadeIn()
动画。试试这个:
$("#dropDownMenu li").each(function(i) {
$(this).delay(100 * i).fadeIn(500);
});
.sub-menu {
position: absolute;
z-index: 1000;
/* color: #fff;
right: 5px; */
}
.sub-menu li {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="sub-menu" id="dropDownMenu">
<ul id="navbar">
<li> First</li>
<li>Second</li>
<li>Third</li>
<li>Fourth</li>
<li>Fifth</li>
</ul>
</div>
如果要增加/减少项目淡入的间隔,请更改为delay()
方法提供的值。在这个例子中,我使用了100ms
。
更新-为了在纯JS中实现相同的效果,您可以在CSS中使用超时和transition
不透明度,如下所示:
document.querySelectorAll("#dropDownMenu li").forEach((li, i) => {
setTimeout(() => {
li.classList.add('show');
}, 100 * i);
});
.sub-menu {
position: absolute;
z-index: 1000;
}
.sub-menu li {
opacity: 0;
transition: opacity 0.5s;
}
.sub-menu li.show {
opacity: 1;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="sub-menu" id="dropDownMenu">
<ul id="navbar">
<li> First</li>
<li>Second</li>
<li>Third</li>
<li>Fourth</li>
<li>Fifth</li>
</ul>
</div>
如果元素数量有限,也可以考虑使用css动画而不是javascript解决方案。可以使用第n个子选择器对每个元素进行寻址,并根据其位置延迟其动画。若要使动画在结尾处停止,请使用动画填充模式特性。
li {
opacity: 0;
animation: fadeIn 0.9s 1;
animation-fill-mode: forwards;
}
li:nth-child(5n+1) {
animation-delay: 0.5s;
}
/*...*/
@keyframes fadeIn {
0% {
opacity: 0.0;
}
100% {
opacity: 1.0;
}
}
请参阅此示例并注意前缀https://jsfiddle.net/97bknLdu/
使用动画成功回调执行类似操作
$(document).ready(function() {
function fade(ele) {
ele.fadeIn(500, function() { // set fade animation fothe emlement
var nxt = ele.next(); // get sibling next to current eleemnt
if (nxt.length) // if element exist
fade(nxt); // call the function for the next element
});
}
$("#circleMenuBtn").click(function() {
fade($('#navbar li').eq(0)); // call the function with first element
});
});
.sub-menu {
left: 0;
top: 0;
position: relative;
z-index: 1000;
color: #000;
right: 5px;
}
ul li {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="sub-menu" id="dropDownMenu">
<ul id="navbar">
<li>First</li>
<li>Second</li>
<li>Third</li>
<li>Fourth</li>
<li>Fifth</li>
</ul>
</div>
<button id="circleMenuBtn">click</button>
相关文章:
- 为什么要包装每一个原型“;类“;JS中具有匿名函数的对象
- 一个接一个地淡出每一个li
- 如何创建一个每行列数未知的html表,对齐列,并为每个单元格/行指定一个id
- 使用jQuery'在数组中循环;s中的每一个都会在生成字符串时在开头产生一个未定义的值
- MongoDB从一组未知子文档中的每一个$slice
- 你如何使 Math.random 数组中的每一个第 9 个元素都是同一个元素?[JavaScript]
- JavaScript:哪个是更好的方法.为每一个或减少
- 如何记录node.js程序中的每一个“抛出”
- 如何为jQuery中的每个数组元素附加不同的动画效果?并用2个按钮一个接一个地向前和向后设置动画(后退和下一步)
- 如何创建一个每30秒循环浏览一系列网站的页面
- 有没有一种简单的方法来转换“;字体"style属性添加到其中的每一个'他的个人风格
- 在JavaScript中创建一个每字符N次的字符串的最有效方法是什么
- Javascript-Regex-用不同的字符串替换字符串中的每一个匹配项
- 我应该'使用strict'对于我编写的每一个javascript函数
- knockout.js事件,用于跟踪输入文本框内的每一个文本更改
- 如何简化和加快每一个
- 使用jQuery将一组元素中的每一个克隆到单独的目标元素中
- 创建一个每秒更新一次的计数器
- 一个Chrome扩展,显示随机图片从所选的本地文件夹为每一个新的选项卡
- 创建一个每秒钟更新一次的日期和时间函数