JQuery按顺序设置列表项的动画,然后淡出列表并重复
JQuery animate list items in sequence then fade out list and repeat
我试图使用jQuery创建一系列事件,但失败得很惨。
我有很多列表,每个列表中都有一些列表项。我试图实现的事件列表如下:
淡入淡出列表1>动画列表1项1>动画表1项2等。。。淡出列表1淡入淡出列表2>动画列表2项目1>动画列表2中项目2等。。。淡出列表2等…
然后这会循环一遍。
我当前的jQuery如下:
$('ul').each(function() {
$(this).children().each(function(i) {
$(this).delay((i++) * 2000).animate({left:0, opacity:1});
});
});
我创建了一个jsfiddlehttp://jsfiddle.net/zp240znv/概述了我在这方面取得的进展,但遗憾的是,它缺乏,所以我们非常感谢任何帮助。
感谢
您可以创建递归函数。一个函数可以遍历父列表,而第二个函数将遍历每个列表中的每个项:
function AnimateList($listItems, index, callback) {
if (index >= $listItems.length) {
$listItems.closest("ul").fadeOut(function() {
$listItems.css("left","400px").css("opacity",0); //reset
callback(); //next list
});
return;
}
$listItems.eq(index).animate({left:0, opacity:1}, function() {
AnimateList($listItems, index+1, callback)
});
}
function FadeLists($lists, index) {
if (index >= $lists.length) index = 0;
var $currentList = $lists.eq(index);
$currentList.fadeIn(function() {
AnimateList($currentList.find("li"), 0, function() { FadeLists($lists, index + 1) });
})
}
var $allLists = $("ul")
FadeLists($allLists, 0);
Fiddle here:http://jsfiddle.net/zp240znv/16/
根据@Regent的要求,将我的答案与更新的fiddle一起发布,这也消除了显示>0索引列表第二项时的延迟。
OLD FIDDLE(在隐藏前一个列表和显示第二个元素之间有延迟)
var i = 0;
$('ul').each(function() {
var hide_after = $(this).children().length;
$(this).children().each(function(counter) {
$(this)
.delay(++i * 2000)
.animate({left:0, opacity:1})
.delay((hide_after - counter) * 2000)
.animate({left:'100%', opacity: 0});
});
});
http://jsfiddle.net/zp240znv/3/
新的FIDDLE使用超时(正确的方式,不过度编码)
var base_duration = 2000;
$('ul').each(function(i) {
var li_count = $(this).children().length,
hide_timeout = ((i+1) * base_duration * li_count);
$(this).children().each(function(ii) {
var li = $(this),
show_timeout = (i * li_count * base_duration) + (ii * base_duration);
window.setTimeout(function() {
li.animate({left:0, opacity:1})
}, show_timeout);
window.setTimeout(function() {
li.animate({left:'100%', opacity:0})
}, hide_timeout);
});
});
http://jsfiddle.net/zp240znv/17/
好的,这是代码
<ul id="first">
<li>List 1, Line 1</li>
<li>List 1, Line 2</li>
<li>List 1, Line 3</li>
</ul>
<ul id="second">
<li>List 2, Line 1</li>
<li>List 2, Line 2</li>
<li>List 2, Line 3</li>
</ul>
<ul id="third">
<li>List 2, Line 1</li>
<li>List 2, Line 2</li>
<li>List 2, Line 3</li>
</ul>
<script type="text/javascript">
$("#first").fadeIn(300,function(){
$(this).children().each(function(i) {
$(this).delay((i++) * 2000).animate({left:0, opacity:1});
});
});
setTimeout(function(){
second_animate();
},5000)
function second_animate(){
$('#first').fadeOut(300,function(){
$("#second").fadeIn(300,function(){
$(this).children().each(function(i) {
$(this).delay((i++) * 2000).animate({left:0, opacity:1});
});
});
});
}
</script>
检查你发布的小提琴,我已经编辑了
$( ".first" ).animate({ "left": "+=5px" }, 500,function(){
$( ".second" ).animate({ "left": "+=5px" }, 500,function(){
$( ".third" ).animate({ "left": "+=5px" }, 500,function(){
$( "#mainContainer" ).hide("slow"); //main container of all that div
});
});
});
在左侧动画的位置,你可以放置你的主容器,这里是包含所有div的主容器。希望你的问题得到解决
$('#firstulid').each(function() {
$(this).children().each(function(i) {
$(this).animate({left:0, opacity:1},2000, function(){
$('#firstulid').hide("slow");
$('#secondulid').each(function() {
$(this).children().each(function(i) {
$(this).animate({left:0, opacity:1},2000, function(){
$('#secondulid').hide("slow");
$('#thirdulid').each(function() {
$(this).children().each(function(i) {
$(this).animate({left:0, opacity:1},2000, function(){
});
});
});
});
});
});
});
});
});
相关文章:
- 要求输入在数据列表中
- 从javascript创建一个列表
- 如何让li项目在这个jQuery列表中滑动和/或淡出视图
- JQuery刷新列表效果-淡入淡出问题
- 在 jquery 中添加淡出选项卡式列表
- 防止下拉列表 ul 在淡出鼠标输入时重新出现
- JQuery 淡出/淡入以创建排序列表
- 添加上一页下一个导航到列表项淡入/淡出循环
- 随机淡入和淡出列表项
- 淡入淡出动画,在列表项之间循环类
- 单击其他列表项时淡出
- 淡出旧图像并淡入新图像以进行列表项导航
- 删除前淡出列表中的项目
- 一次显示一个DOM元素的淡入/淡出列表
- 使用JQuery淡出JSON ajax列表
- JQuery按顺序设置列表项的动画,然后淡出列表并重复
- Angular ngAnimate列表项自动淡出
- 如何一次一个地淡入和淡出列表中的一个项目
- 淡入和淡出无序列表的下拉列表
- jQuery在无序列表中的淡出