Javascript迭代显示带有暂停/停止jquery fadeIn和fadeOut的自定义列表
我有一个不断更新的数组,需要一次显示数组5中的项目。有时数组中的元素多于5个,有时则少于5个。如果数组中有5个以上的元素,那么我需要一次循环5个元素。例如,如果有10个元素,我想淡入1-5,然后淡出1-5,然后淡入5-10。我有这个工作,并且更新,但是,如果在数据更新之后只有4篇新闻文章可用,它仍然会在1-4中淡入淡出,一次又一次。我需要总是在第一篇文章中淡出,如果少于NumberShow,不要淡出,只需更新 我尝试了clearInterval,但它停止了更新。我试过了。停止()。消失();但随后,淡入仍在发生。我试过了。停止()。消失();with.stop().fadeIn();但数据永远不会消失。我是否应该传入数组以显示它,然后在其中循环 对于测试,这是使用日期模拟的。每隔8秒,它应使用更新的编号更新数据。如果有4篇文章,淡入并更新Date.now()编号,但永不淡出。如果有10篇文章,淡入并更新每个周期Javascript迭代显示带有暂停/停止jquery fadeIn和fadeOut的自定义列表,javascript,jquery,loops,fadein,fadeout,Javascript,Jquery,Loops,Fadein,Fadeout,我有一个不断更新的数组,需要一次显示数组5中的项目。有时数组中的元素多于5个,有时则少于5个。如果数组中有5个以上的元素,那么我需要一次循环5个元素。例如,如果有10个元素,我想淡入1-5,然后淡出1-5,然后淡入5-10。我有这个工作,并且更新,但是,如果在数据更新之后只有4篇新闻文章可用,它仍然会在1-4中淡入淡出,一次又一次。我需要总是在第一篇文章中淡出,如果少于NumberShow,不要淡出,只需更新 我尝试了clearInterval,但它停止了更新。我试过了。停止()。消失();但随
var numberToShow = 5;
var newsArray = [];
var startRow = 0;
var endRow = 0;
function getData() {
// Simulate the data changing using date.
newsArray = [Date.now(), "News article 1", "News article 2", "News article 3", "News article 4",
"News article 5", "News article 6", "News article 7", "News article 8", "News article 9"];
showNews(numberToShow);
}
// Fade out the results for the next cycle
setInterval(function() {
$("span.text").fadeOut({
duration: 800
});
setTimeout(
function() {
getData();
},
(800)
);
}, 8000);
// Update the data
function updateData() {
getData();
setTimeout(updateData, 6000);
}
// Display the results
function showNews() {
if (endRow >= newsArray.length) {
startRow = 0;
}
endRow = startRow + numberToShow;
if (endRow >= newsArray.length) {
endRow = newsArray.length;
}
var results = "";
for (var k = startRow; k < endRow; k++) {
results += "<span class='text' style='display:none;'>" + newsArray[k] + "</span><br>";
}
startRow = startRow + numberToShow;
document.getElementById('showResults').innerHTML = results;
$("span.text").fadeIn({
duration: 800
});
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="showResults"></div>
var numberToShow=5;
var newsArray=[];
var startRow=0;
var endRow=0;
函数getData(){
//使用日期模拟数据的更改。
newsArray=[Date.now(),“新闻文章1”,“新闻文章2”,“新闻文章3”,“新闻文章4”,
“第5条新闻”、“第6条新闻”、“第7条新闻”、“第8条新闻”、“第9条新闻”];
showNews(numberToShow);
}
//淡出下一个周期的结果
setInterval(函数(){
$(“span.text”).fadeOut({
持续时间:800
});
设置超时(
函数(){
getData();
},
(800)
);
}, 8000);
//更新数据
函数updateData(){
getData();
setTimeout(updateData,6000);
}
//显示结果
函数showNews(){
if(endRow>=newsArray.length){
startRow=0;
}
endRow=startRow+numberToShow;
if(endRow>=newsArray.length){
endRow=newsaray.length;
}
var结果=”;
对于(var k=startRow;k”;
}
startRow=startRow+数字显示;
document.getElementById('showResults')。innerHTML=results;
$(“span.text”).fadeIn({
持续时间:800
});
}
好的-不确定您到底想做什么-但您可以轻松地将我的代码更改为您需要的任何内容
…让我们从清晰的算法开始:
var
numberToShow=5,
newsArray=[],
startRow=0,
endRow=0,
$results=$(“#showResults”),
可见=假,
定时器;
函数FADEINIFREADED(回调){
var is_visible=可见;
可见=真实;
如果(是否可见){
回调();
}否则{
$results.fadeIn(800,回调);
}
}
需要函数淡出(回调){
var is_visible=可见;
可见=假;
如果(是否可见){
$results.fadeOut(800,回调);
}否则{
回调();
}
}
函数getData(){
//模拟数据的变化
newsArray=[Date.now()];
//添加随机数目的项目
var j=Math.floor(Math.random()*6)+2;
for(var i=1;i=newsaray.length){
startRow=0;
}
endRow=startRow+numberToShow;
if(endRow>newsaray.length){
endRow=newsaray.length;
}
var结果=”;
对于(var k=startRow;k”;
}
startRow=startRow+数字显示;
$results.html(results);
FadeInNifRequired(函数(){
nextCycle();
});
}
函数nextCycle(){
//数据的每一部分都将显示6+0.8+0.8=7.6秒
计时器=设置超时(函数(){
if(startRow>=newsArray.length){
//如果已显示所有项目-获取新数据(更新)
getData();
}否则{
//如果要显示更多内容-淡出并渲染
需要衰减(函数(){
renderList();
});
}
}, 6000);
}
getData()代码>
虽然前面的答案很好——但这一个可能更像您描述的情况。。。
对想法的简短描述:
显示列表或其部分
如果列表较长-重复(几秒钟后转到步骤1以显示列表的另一部分)
更新时-随时-使用新阵列重新启动
和工作示例(删除了不需要的代码并添加了按钮以帮助测试):
var
numberToShow=5,
newsArray=[],
startRow=0,
endRow=0,
$results=$(“#showResults”),
定时器;
函数getData(){
//模拟数据的变化
newsArray=[Date.now()];
//添加随机数目的项目
var j=Math.floor(Math.random()*7)+1;
for(var i=0;i=newsaray.length){
startRow=0;
}
endRow=startRow+numberToShow;
if(endRow>newsaray.length){
endRow=newsaray.length;
}
var结果=”;
对于(var k=startRow;k”;
}
startRow=startRow+数字显示;
$results.html(results);
$results.fadeIn(800,function(){
nextCycle();
});
}
函数nextCycle(){
//只有在显示更多结果时才开始循环
如果(newsaray.length>numberToShow){
计时器=设置超时(函数(){
$results.fadeOut(800,函数(){
renderList();
});
}, 4000);
}
}
//按要求更新
函数updateData(){
清除超时(计时器);
$results.stop();
getData();
}
//添加测试按钮
$results.before(
$('').text('Update now')。单击(函数(){
更新数据();
})
)
getData()代码>