现在在页面末尾加载脚本似乎是很常见的做法/而不是在 <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/