如何无限循环项目列表
How to loop a list of items infinitely?
我需要像垂直向上循环一样循环 li 项目集,每个循环之间有 5000 毫秒的延迟。我也想顺利地向上移动列表项。
我的代码在开始时每 5000 毫秒触发一次循环,但它不能顺利地向上移动项目。经过几次循环迭代后,它运行得非常快。
这是我正在尝试的jquery代码。
function tick(){
$('#itemflowslider ul li').animate({top:"-225px"},"slow");
$("#itemflowslider ul li:first").appendTo("#itemflowslider ul");
setInterval(function(){ tick () }, 5000);
}
//Call on page load
$(tick);
我无法弄清楚这个问题的原因是什么。请帮助我度过难关。
谢谢。
编辑:我已经做了一个小提琴,但没有想到将其包含在我的问题中......http://jsfiddle.net/654DX/2/。
function tick(){
setInterval(function(){
$('#itemflowslider ul li').animate({top:"-225px"},"slow");
$("#itemflowslider ul li:first").appendTo("#itemflowslider ul");
}, 5000);
}
//Call on page load
$(tick);
你在问题中编码它的方式会产生很多很多tick((,这就是为什么你注意到速度加快的原因。以这种方式编码只允许一个tick((,因此每5秒产生一次效果。
我在你的脚本中注意到的最大错误是递归使用setInterval
。事实上,setInterval
重复调用传递的函数(与setTimeout
不同(,因此,每 5 秒,调用次数呈指数级增长(1、2、4...(。换句话说,每 5 秒setInterval
调用 setInterval
,它执行相同的操作,依此类推......
然后,我猜你想从原始位置减去 225 像素,而不是转到这个位置。如果我是对的,请用-=225px
替换-225px
.
最后,我想您更愿意等到所有动画都完成之后再将第一项移动到列表的末尾(请记住,animate
分别适用于每个项目(。
所有修复一起:
$(function tick() {
var h = $('li:first').outerHeight(true);
var anim = $('li').animate({ top: '-=' + h + 'px' }, 'slow');
$.when(anim).done(function () {
$('li:first').appendTo('ul');
$('li').css('top', 'auto');
setTimeout(tick, 5000);
});
});
我做了类似的东西:http://jsfiddle.net/wared/GJvLw/。
每次执行tick也会再次执行setInterval!
你可以这样尝试:
function tick() {
$('#itemflowslider ul li').animate({top:"-225px"},"slow");
$("#itemflowslider ul li:first").appendTo("#itemflowslider ul");
}
$(function(){
setInterval(tick, 5000);
});
你需要你的元素去 -225px 位置或移动 225px 上部的每个刻度?如果是第二个,那么你需要-=225px
,代码将是:
function tick() {
var $elems = $('#itemflowslider ul li');
if ($elems.position().top < 225) {
$elems.animate({top: 0 }, "slow");
return;
}
$elems.animate({top: "-=225px"},"slow"); // slow means = 600 ms!
$("#itemflowslider ul li:first").appendTo("#itemflowslider ul");
setTimeout(tick, 5000); // start tick again
}
$(document).ready(function(){
tick(); // start loop
});
Slow
= 600 毫秒,因此 4400 毫秒 (5000 - 600( 什么都不会移动,当时间消失时会消失。
编辑:
根据我更新的小提琴的评论
function tick() {
var $ul = $('#itemflowslider ul');
var $li1 = $ul.find("li").first();
$ul.append($li1.clone());
$li1.css({
height: '1em',
visibility: 'hidden'
})
.animate({height: 0}, 'slow', function(){
$(this).remove();
});
setTimeout(tick, 5000); // start tick again
}
$(tick);
你可以做这样的事情:
$(document).ready(function(){
setInterval(function(){
$('#itemflowslider ul li').animate({top:"-225px"},"slow");
$("#itemflowslider ul li:first").appendTo("#itemflowslider ul");
},5000);
});
可能需要计算循环时间以确保动画已完成。我的意思是这样的:
$(function(){
tick();
});
function tick(){
$('#itemflowslider ul li').animate({top:"-225px"}, 'slow', function(){
$("#itemflowslider ul li:first").appendTo("#itemflowslider ul");
setInterval(tick, 5000);
});
}
- 为非列表项目创建HTML实时搜索
- Codrops页面转换.如何创建单独的按钮,而不是列表项目的效果
- 如何允许我的访问者通过拖放来排列列表项目
- 输入中的ngBlur和该输入框中搜索的列表项目之间的问题
- 如果选中某个特定项目,则禁用所有复选框列表项目
- 所选下拉列表项目-调用/获取数据
- 如何将项目添加到重复列表和停止列表项目中,这些项目正由数据绑定更改
- 如何显示/隐藏列表项目中的项目MVVM剑道
- 如何通过输入项目的id或序列在列表项目的文本中查找值
- 隐藏列表项目在角离子中继器
- 更新列表项目类别单击
- 如何选择第三个列表项目与javascript
- 自动居中列表项目/图像100%页面高度
- Angular js嵌套控制器列表/项目
- Sencha触摸改变一个特定的列表项目的颜色
- 无法识别如果我已经点击了列表项目
- 点击语音气泡按顺序显示列表项目-在IE8中不工作
- Swig模板列表项目编号
- 在列表项目符号图像上指定单击事件
- 动态增加离子列表项目的高度嵌入文本区域内容的高度