延迟加载flash对象

时间:2010-04-11 02:24:28

标签: javascript jquery flash dom lazy-loading

我正在使用jQuery延迟加载插件来推迟在大型网页上加载重叠图像。这非常有效。现在,我想将相同的技术应用于一个大型的Flash对象,这个对象也不尽如人意。我不认为延迟加载插件处理不是图像的东西(至少到目前为止它看起来不那么直接。)我可能必须自己做。在这种情况下,如何检测包含Flash对象的区域何时可见?

编辑:我想我可以使用jQuery维度插件破解一些内容,并跟踪包含Flash对象的div

Edit2:好的,我在这个问题上开了一笔赏金。如果有人能够在我有机会在周末玩这个游戏之前得到它,请给你+ 250。 :)

5 个答案:

答案 0 :(得分:2)

如果内存正确地为我服务,将DOM中的flash对象的wmode参数设置为opaque将执行此操作。关于各种wmode设置here

,我们会有一些讨论

答案 1 :(得分:0)

嗯,我不知道这个jquery prugin是如何工作的,但你说如果使用图像它会做你想要的 - 所以为什么不把图像放在你的flash对象应该的位置,设置一个{ {1}}对于这个图像,如果这个onload被触发,你用你想要的flash对象替换图像(假设jquery-plungin做了疯狂的东西,所以之前没有触发onload)。

编辑:我知道img-tags的onload - 属性是不允许正式的,但大多数(所有?)现代浏览器支持这个(据我所知) - 也许这有助于在没有这些问题的情况下获得另一种解决方案...

答案 2 :(得分:0)

我认为最简单的方法是编辑lazy load plugin并将特定于图像的代码中的detect-when-in-view代码分开。视图中的检测代码会触发元素(在您的情况下是容器/占位符div)上的“出现”事件,您可以将其挂钩以加载Flash。

答案 3 :(得分:0)

lazyLoad不能与您的脚本一起使用的原因是因为lazyLoad查看了flash对象(和)中不存在的“src”属性。

在lazyLoad src中,您应该修改引用“src”属性的任何位置。您需要知道元素是对象还是嵌入并正确引用它们的“源”。

例如

(未经测试):

/* Save original only if it is not defined in HTML. */
if (undefined == $(self).attr("original")) {
   $(self).attr("original", $(self).attr("src") || $(self).attr("data") || $(self).find("embed").attr("src") );
}

如果你仍然有兴趣放弃赏金让我知道,我会再多看一下。

答案 4 :(得分:0)

查看延迟加载插件的源代码,你会发现没有太多魔法发生。基本上有两件有趣的事情发生在那里:

  • 有一种方法可以通过获取包含窗口的高度和元素的偏移量来确定元素相对于折叠的位置。
  • 还有一个事件处理程序,用于侦听滚动事件,检查是否需要显示任何“隐藏”图像

因此,为了延迟加载,我只是重用或删除确定给定元素是否在视图中的函数。连接到滚动事件,如果需要显示某些内容,则使用swfobject嵌入SWF。应该这样做。

另外看一下延迟加载插件source,这真的不难。