Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在setInterval时间中使用JSON变量_Javascript_Html_Json_Setinterval - Fatal编程技术网

Javascript 在setInterval时间中使用JSON变量

Javascript 在setInterval时间中使用JSON变量,javascript,html,json,setinterval,Javascript,Html,Json,Setinterval,我有一个脚本,它当前接受一个json对象,并将其转换为一个pageID数组,其中包含一个“content”数组 这很好,我在页面加载时调用它,然后在setInterval内调用它。这同样有效,但我修改了它以使用当前页面元素的“duration”值,并使用它;它不是动态的,但它实际上似乎只使用了最后一个元素的持续时间值(我想这对数组是有意义的) 如何更改此设置,使当前设置间隔计时器始终为当前元素的“持续时间”值 您可以运行下面的代码段来查看当前函数 const obj=[{ “pageID”:“

我有一个脚本,它当前接受一个json对象,并将其转换为一个pageID数组,其中包含一个“content”数组

这很好,我在页面加载时调用它,然后在setInterval内调用它。这同样有效,但我修改了它以使用当前页面元素的“duration”值,并使用它;它不是动态的,但它实际上似乎只使用了最后一个元素的持续时间值(我想这对数组是有意义的)

如何更改此设置,使当前设置间隔计时器始终为当前元素的“持续时间”值

您可以运行下面的代码段来查看当前函数

const obj=[{
“pageID”:“93”,
“页面类型\ id”:“2”,
“显示id”:“2”,
“幻灯片顺序”:空,
“持续时间”:“10”,
“背景图片”:“images\/bg\u rainbow.svg”,
“面板id”:“86”,
“面板类型id”:“2”,
“cont_id”:“138”,
“contID”:“138”,
“内容”:“\r\n\r\n\r\n\r\n\r\n左93\r\n\r\n”
},
{
“pageID”:“93”,
“页面类型\ id”:“2”,
“显示id”:“2”,
“幻灯片顺序”:空,
“持续时间”:“10”,
“背景图片”:“images\/bg\u rainbow.svg”,
“面板id”:“87”,
“面板类型id”:“3”,
“cont_id”:“139”,
“contID”:“139”,
“内容”:“\r\n\r\n\r\n\r\n\r\n右93\r\n\r\n”
},
{
“pageID”:“94”,
“页面类型\ id”:“1”,
“显示id”:“2”,
“幻灯片顺序”:空,
“持续时间”:“15”,
“背景图片”:“images\/bg\u rainbow.svg”,
“面板id”:“87”,
“面板类型id”:“1”,
“cont_id”:“139”,
“contID”:“139”,
“内容”:“\r\n\r\n\r\n\r\n\r\n整页\r\n\r\n”
},
];
设计数器=0;
var fullContent=document.getElementById('fullContent');
var leftContent=document.getElementById('leftContent');
var righcontent=document.getElementById('righcontent');
var fullColumn=document.getElementById('fullColumn');
var leftColumn=document.getElementById('leftColumn');
var rightColumn=document.getElementById('rightColumn');
const pages\u array=obj.reduce(函数(pages\u array,item,index,obj){
const current_pageID=item.pageID;
const current_pageType=item.page_type_id;
const duration=item.duration;
const exisiting_page=pages_array.find(page=>page.pageID==当前_pageID);
如果(现有页面===未定义){
常量新页面={
pageID:当前页面ID,
页面类型:当前页面类型,
持续时间:持续时间,
内容:[项目]
}
pages\u array.push(新建页面);
}否则{
现有页面内容推送(项目)
}
返回页面\u数组;
}, []);
/*立即调用重载函数,这样就不会有初始延迟*/
重载函数();
/*然后使用setInterval调用它以使用json中的“duration”值并转换为毫秒*/
//setInterval(重载函数,parseInt(页面数组[计数器])。持续时间)*1000);
函数重载函数(){
const currentJSONobject=pages_数组[计数器];
fullContent.innerHTML='';
rightContent.innerHTML='';
leftContent.innerHTML='';
对于(var i=0;i”,pages\u数组[counter].pageType);
fullContent.innerHTML=currentJSONobject.content[i]。面板类型[U id==1?currentJSONobject.content[i]。内容:fullContent.innerHTML;
fullColumn.style.display=“block”;
leftColumn.style.display=“无”;
rightColumn.style.display=“无”;
}
if(parseInt(pages_数组[counter].pageType)==2){
console.log(“Paren pageType=>”,pages\u数组[counter].pageType);
leftContent.innerHTML=currentJSONobject.content[i]。面板类型\U id==2?currentJSONobject.content[i]。内容:leftContent.innerHTML;
rightContent.innerHTML=currentJSONobject.content[i]。面板类型\U id==3?currentJSONobject.content[i]。内容:rightContent.innerHTML;
leftColumn.style.display=“block”;
rightColumn.style.display=“block”;
fullColumn.style.display=“无”;
}
}
日志(分页数组[计数器]);
console.log(setInterval);
setTimeout(重载函数,parseInt(分页数组[计数器])。持续时间)*1000);
计数器+=1;
if(计数器===页面\u数组长度){
计数器=0;
}
}
控制台日志(obj);
console.log(pages\u数组)

由于无法更改setInterval timeout,请连续调用setTimeout

/*Call reloadFunction immediately so there's no initial delay*/
// keep this
reloadFunction();

/*then call it withing setInterval to use the 'duration' value in json and convert to milliseconds*/
// get rid of this
//setInterval(reloadFunction, parseInt(pages_array[counter].duration) * 1000);

function reloadFunction() {
  // most of your code

  setTimeout(reloadFunction, parseInt(pages_array[counter].duration) * 1000);

  counter += 1;
  if (counter === pages_array.length) {
    counter = 0;
  }
}

一旦调用setInterval,就不能更改其超时时间。改用重复调用setTimeout。我如何转换它以保留功能,但使用setTimeout?我现在就来试一试,谢谢!出于某种原因,我认为setInterval可能是动态的。对不起,你能检查一下我更新的代码片段吗?我已经实现了这一点,但它似乎根本不起作用。或者setTimeout应该在for循环之外吗?对setTimeout的调用需要正好在计数器+=1之前