【问题标题】:Execute callback after modernizr/yepnope has loaded all files在modernizr/yepnope 加载所有文件后执行回调
【发布时间】:2013-09-30 17:47:54
【问题描述】:

在我的页面上运行后续脚本之前,我有许多测试条件和文件要加载。有没有办法在我的所有文件都加载后触发回调?

this post 提出了以下建议,并传达了我的意图,但实际上并没有用。 complete 中的函数在 1.js 或 2.js 完成加载之前触发。

Modernizr.load([
    {
        test: App.isSmallScreen,
        yep:  '1.js',
        nope: '2.js'
    },
    {
        test: App.isTouch,
        yep: '3.js'
    },
    {
        test: Modernizer.csstransitions,
        nope:4.js
    },
    {
        complete: animationInit
    }
]);

【问题讨论】:

  • 这听起来很棘手,我不确定您是否可以使用该框架。一个选项可能是有一个由 1,2,3,4 等调用的接收函数(虽然这有点混乱),并且只有在所有函数都被接收后才调用完整的函数。呃,抱歉,如果这是解决方案。
  • 当前的解决方案是将所有测试嵌套为回调函数。这可能不那么混乱:)
  • 哎呀。顺便说一句,这一切都不会在“onload”事件之前加载吗?在此之前是否必须调用animationInit?
  • 测试目前在DOMReady上执行,之后动画会尽快初始化。

标签: javascript modernizr yepnope


【解决方案1】:

提前为这么便宜的把戏道歉,但这是我能想到的最好的办法。不过肯定可以改进。

嵌入它或扩展 Modernizr 以某种方式构建“完成”事件可能相当简单,以更干净地做到这一点。

var completed = []
var complete = function(i) {
  completed.push(i)
  if (completed.length === 3) animationInit();
}

Modernizr.load([
    {
        test: App.isSmallScreen,
        yep:  '1.js',
        nope: '2.js',
        complete: function() { complete(1); }
    },
    {
        test: App.isTouch,
        yep: '3.js'
        complete: function() { complete(2); }
    },
    {
        test: Modernizer.csstransitions,
        nope:4.js
        complete: function() { complete(3); }
    }
]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多