javascript - 在库加载后将 JS 排队运行的最简单方法是什么? (jQ 在页末)

标签 javascript jquery coffeescript deferred-execution

现在在页面末尾加载脚本似乎是很常见的做法/而不是在 <head> 中。问题是,当您由于模板结构、变量访问等原因需要在主体中内联运行一些 jQuery 时,具体取决于项目。

在稍后定义 jQuery 后,对函数进行排队以运行的最简单方法(最好是普通 JS)是什么?

有很多复杂的 JS 库来处理这个问题,我更喜欢一个零文档的脑死亡/可理解的过程。

是否有一种公认的“单行代码”无需大量代码即可使用?

这里是 CoffeeScript 的第一轮,它可以工作,只是为了表明我正在努力自己回答这个问题。接下来我会将其转换为 JS 并尝试提出一个更简单的 api。

class root.DeferUntil
    constructor: ({@deferredFunction, @deferralCheck} = {}) ->
        @interval = setInterval @executeIfLoaded, 500

    executeIfLoaded: =>
        if not @executed and @deferralCheck()
            @deferredFunction()
            clearInterval @interval

new DeferUntil
     deferredFunction: ->
         console.log "Hi, #{$} shouldn't raise errors"
     deferralCheck: ->
         $ != undefined

最佳答案

我过去使用过类似的东西:

window.Preload = $.extend [],
  run: (e) -> e(window.$)
  load: ->
    @shift = @run
    @push = @run
    @run(func) for func in @
    @splice(0, @length)

然后,您可以将函数推送到 Preload 数组中:

Preload.push ($) ->
  # Do something with jQuery here

加载 jQuery 后:

Preload.load()

这将执行所有预加载函数,如果已经调用了 load(),则推送到 Preload 的函数将立即执行。此模式对于各种异步加载行为都很有用,在这种情况下,您希望仅在满足前提条件后才运行某些函数,而不必知道是否满足前提条件。

关于javascript - 在库加载后将 JS 排队运行的最简单方法是什么? (jQ 在页末),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20832033/

相关文章:

javascript - 当某些操作会设置 cookie 时,让我的页面显示 cookie 信息

javascript - jQuery - 获取包含 HTML 标签的文本区域的值

javascript - 单击事件仅在类的一个元素上触发

javascript - 当 'ESC' 键触发事件时,未在 keydown 事件上提交表单

angularjs - ngAnimate 1.4.7 单元测试不调用动画函数

coffeescript - 使用 Jest 和 TestUtils 测试 React 表单提交

javascript - 如何在 .js.coffee 脚本 rails 中使用路由

javascript - jQuery addClass 和 removeClass 事件对悬停功能有奇怪的影响

javascript - 如何从servlet页面中的ajax请求中获取数据?

javascript - normalizr 模式中的嵌套数组