在setTimeout运行

时间:2017-08-04 13:37:11

标签: javascript jquery callback visual-composer

我的网页加载的一个javascript文件有此调用

window.setTimeout(function() {
    self.MakeWaterFall(self)
}, 500);

该.js文件托管在其他服务器上,并加载在网页上,类似于从CDN加载的许多js库,并且该文件在500ms后具有“硬编码”的setTimeout调用

现在,我希望'MakeWaterFall'函数稍稍在页面上运行

我想让它在自定义触发器触发后运行,在ajax数据下线并在页面上呈现帖子之后。

这是绑定触发器,我需要将MakeWaterFall fn'移动到..

$(window).bind( 'grid:items:added' , function(){
  // .. some custom events on elements +
  MakeWaterFall(window);
} ) ;

这个问题本质上就像'我可以在window.setTimeout运行并阻止一个规范调用并将其移动到其他地方,后者在代码中吗?

也不是说我有其他代码通过window.setTimeout代码在代码中的其他地方运行,我知道糟透了:(

感谢

2 个答案:

答案 0 :(得分:0)

使用这样的回调函数:

function myFunction(callback){

myFunction1();

if(typeof(callback) === "function()"){

myFunction2();

}}"

答案 1 :(得分:0)

好的,我找到了一个解决方案,实际上非常简单..它包含了这个步骤:

1)我确保在托管CDN问题之前我先在页面上加载了custom.js文件。 js文件出现在页面上(其中有setTimeout

2)我保留了原生功能并制作了自定义功能并执行了此操作:

// save original setTimeout function to savedST
window.savedST = window.setTimeout ;
// define custom window.setTimeout function and hook to it
window.setTimeout = function(a, b){ 
    // I'm testing if this calls waterfall fn.. then bounce that f() to other binded event
    if ( a.toString().indexOf( 'MakeWaterFall' ) > -1 ){
        $(window).bind( 'grid:items:added', function(){
            a();
        });
    } else {
        // run normal or original setTimeout as usual
        savedST(a, b);  
    }
} ;

我确定这可以帮助那些需要覆盖" setTimeout"和/或" setInterval",本机窗口函数

欢呼,k