开始刷新javascript函数,然后停止它们并重新刷新它们
我会尽力把我的问题解释清楚。 所以我制作了一系列javascript函数来显示一个值,为了使这些值保持最新,我需要一个时间间隔来刷新函数 这些是我的时间间隔中的函数开始刷新javascript函数,然后停止它们并重新刷新它们,javascript,html,jquery,Javascript,Html,Jquery,我会尽力把我的问题解释清楚。 所以我制作了一系列javascript函数来显示一个值,为了使这些值保持最新,我需要一个时间间隔来刷新函数 这些是我的时间间隔中的函数 var interval = null; //make global variable for interval function refresh(){ // create a function that contains all the functions that need to be refreshed so I
var interval = null; //make global variable for interval
function refresh(){ // create a function that contains all the functions that need to be refreshed so I can pass this function to my setInterval
g1.refresh(linearScaling(0, 32761 , 0 , 10, readData('IW0')));
showAnalogText('textonly', 'IW0');
g2.refresh(linearScaling(0, 32761 , 0 , 10, readData('IW1')));
showAnalogText('textonly2', 'IW1');
showDigInputImg('light1', 'IX2.0', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputImg('light2', 'IX2.1', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputBool('led1', 'IX2.0', 'radio');
showDigInputBool('led2', 'IX2.1', 'radio');
showDigInputBool('boolean1', 'IX2.0', 'bool');
showDigInputBool('boolean2', 'IX2.1', 'bool');
showDigInputBool('text1', 'IX2.0', 'text');
showDigInputBool('text2', 'IX2.1', 'text');
showDigInputImg('output1', 'QX2.0', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputImg('output2', 'QX2.1', '/imgs/lightON.png', '/imgs/lightOFF.png');
}, 1000)
因此,这些函数需要不断更新,它们使用ajax执行读取请求,但我也有写入函数,我想要完成的是,每当我执行写入函数时停止间隔,这样ajax请求停止,我就可以执行写入请求,当写入完成时,它会重新启动间隔
以下是我的启动和停止功能:
function startRefresh(){ //needs to be declared in my library but the function refresh() doesn't exist in library
if (!interval){
interval = setInterval(refresh, 1000);
}
}
function stopRefresh(){
clearInterval(interval);
interval = null;
}
我知道这是可行的,但问题是我正在构建一个库,以便用户可以重新使用我的函数供自己使用,因此startrefresh和stoprefresh函数将在库中,但startrefresh函数需要refresh()(包含所有其他函数),但refresh只能在HTML页面本身的javascript中声明(不在库中)因为函数refresh包含在运行时创建的g1和g2等对象,所以我不能在库中声明refresh(),因为它包含的对象还不存在
有人能帮我找到一个简单的解决方案吗?你可以随心所欲地修改,我只想要一种最有效的方式,用户可以将需要刷新的所有函数放在一个间隔内,然后在我执行写入时停止并启动间隔,但停止和开始刷新函数需要在库中,用户不应该看到开始和结束stopfunction,它们在我的write函数中被调用。
希望有人能理解这一点,并帮助我,我将非常感激,如果你需要更多的解释,我很高兴给你
也许把所有函数放在某种变量中,然后把变量传递给我的startrefresh函数,这样行吗
Peace,Stijn为什么不使用函数作为
startRefresh的参数
function startRefresh(refresh) {
if (!interval){
interval = setInterval(refresh, 1000);
}
}
因此,您可以使用匿名函数运行该函数
startRefresh(function() {
//do stuff to be refreshed
});
或者在您的情况下,您也可以将刷新功能存储在匿名函数中
startRefresh(function(){
g1.refresh(linearScaling(0, 32761 , 0 , 10, readData('IW0')));
showAnalogText('textonly', 'IW0');
g2.refresh(linearScaling(0, 32761 , 0 , 10, readData('IW1')));
showAnalogText('textonly2', 'IW1');
showDigInputImg('light1', 'IX2.0', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputImg('light2', 'IX2.1', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputBool('led1', 'IX2.0', 'radio');
showDigInputBool('led2', 'IX2.1', 'radio');
showDigInputBool('boolean1', 'IX2.0', 'bool');
showDigInputBool('boolean2', 'IX2.1', 'bool');
showDigInputBool('text1', 'IX2.0', 'text');
showDigInputBool('text2', 'IX2.1', 'text');
showDigInputImg('output1', 'QX2.0', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputImg('output2', 'QX2.1', '/imgs/lightON.png', '/imgs/lightOFF.png');
}, 1000)
});
更新
function makeStartRefresher(refresh) {
return function() {
if (!interval){
interval = setInterval(refresh, 1000);
}
}
}
您可以通过以下方式使用此功能:
var startRefresh = makeStartRefresher(function() {
g1.refresh(linearScaling(0, 32761 , 0 , 10, readData('IW0')));
showAnalogText('textonly', 'IW0');
g2.refresh(linearScaling(0, 32761 , 0 , 10, readData('IW1')));
showAnalogText('textonly2', 'IW1');
showDigInputImg('light1', 'IX2.0', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputImg('light2', 'IX2.1', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputBool('led1', 'IX2.0', 'radio');
showDigInputBool('led2', 'IX2.1', 'radio');
showDigInputBool('boolean1', 'IX2.0', 'bool');
showDigInputBool('boolean2', 'IX2.1', 'bool');
showDigInputBool('text1', 'IX2.0', 'text');
showDigInputBool('text2', 'IX2.1', 'text');
showDigInputImg('output1', 'QX2.0', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputImg('output2', 'QX2.1', '/imgs/lightON.png', '/imgs/lightOFF.png');
}, 1000)
});
这是有道理的,但问题是,我的库中有一个写函数,当单击按钮时会调用它,这是我的写函数“function writeData(adres,value){stopfresh();var url=getUrl();$.get(url+'/WRITEPI?ADR1='+adres+'&VALUE1='+value+'&FORMAT1=%d',function(data){});startRefresh(refresh); }所以问题是当调用writedata时,startrefresh最终会被调用,但我不能像你说的那样实现它,因为库中不存在像g1和g2这样的元素。很抱歉,如果你不能理解,我很难解释。你可以使用更高阶的函数,我会更新答案。哇,很好,我理解了,非常感谢,但我仍然有一个问题,当我创建变量“startrefresh”时,它是由“makestartrefresh”返回的函数,何时执行?在创建变量时是否调用它?是否可以将此变量传递给函数(即我的write函数)并在该函数中执行变量?我希望这样,无论何时执行写入操作(必须停止并重新启动间隔),都可以传递该变量因此,为了执行
startrefresh
函数,我不必在write函数中重新定义整个startrefresh变量,您需要执行与普通函数startrefresh()相同的操作
您可以将变量和函数都传递给javascript中的其他函数。感谢您的大力帮助,我现在可以使用了:非常感谢