开始刷新javascript函数,然后停止它们并重新启动它们

时间:2013-03-12 19:30:00

标签: 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 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() (包含所有其他函数)但刷新只能在HTML页面本身的javascript中声明(而不是在库中),因为函数刷新包含在运行时创建的对象,如g1和g2,所以我可以'在我的库中声明refresh()因为它包含尚不存在的对象。

任何人都可以帮助我找到一个简单的解决方案,U可能会改变你想要的任何东西,我只想要一种最有效的方式,用户可以在一个间隔内放置他需要刷新的所有功能,并在执行时停止并启动间隔一个写,但stop和startrefresh函数需要在库中,用户不应该看到start和stopfunction,它们在我的write函数中被调用。 希望有人能理解这一点并帮助我,我将非常感激,如果你需要更多的解释我很乐意把它给你

可能将所有函数放在某种变量中并将该变量传递给我的startrefresh函数,这会起作用吗?

和平,Stijn

1 个答案:

答案 0 :(得分:1)

为什么不使用函数作为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)
});