繁体   English   中英

延迟加载flash对象

[英]Lazy-loading flash objects

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

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

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

如果内存正确地为我服务,将DOM中flash对象的wmode参数设置为opaque将执行此操作。 有一个关于各个位dicussion的wmode设置在这里

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

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

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

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") );
}

如果你仍然有兴趣放弃那个赏金让我知道,我会更多地研究它。

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

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

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

另外看看延迟加载插件 ,它真的不难。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM