我一直在修补ContentFlow JavaScript库found here,它是Apple在iTunes中的专辑封面流程的一个非常光滑的复制品。我正在为我妻子的maternity jeans网站加载40多张图片。我在Slideshow addOn中添加了一些改进,包括一个计数器(42个中的1个)和牛仔裤供应商的徽标。
这很棒,直到你在IE浏览器中看到它。实际上,对于所有非IE浏览器,它的加载速度比Facebook Like按钮快,但它从不加载IE。你看到的只是'加载'图像。它从未在IE7中加载。它在IE8中加载了25%的时间。
如果我在_init函数中将alert(cf._imagesToLoad)
的警告添加到行之前:
if (cf._imagesToLoad == 0 || new Date() - now > cf._loadingTimeout) {
然后IE挂起一定数量(小于20,通常小于10),这让我觉得IE没有像其他浏览器一样快地加载42个图像。
如何增加加载图片所需的时间,因为它不会接近loadingTimeout
默认值30秒?
为什么在IE7和IE中加载图像需要更长时间? IE8?它就像FF,Safari和amp;铬。
奇怪的是,如果刷新IE的缓存,它第一次(大部分时间)工作正常。也许IE缓存问题?
有没有人知道在IE中对这个特定库进行故障排除的好方法?
答案 0 :(得分:0)
我把头发拉了出来,直到我记起JQUERY!
我通过替换通过attach事件元素的onload事件的attachEvent处理程序调用'foobar'函数的逻辑来获得相同的影响。
(由于不同浏览器处理事件处理程序的方式不同,本节已经被很多人重写了。)
请参阅以下讨论:http://code.google.com/p/contentflow/issues/detail?id=3 并使用以下代码替换jbdemonte的修复:
$(this.content).ready(function(){foobar()});
答案 1 :(得分:0)
据我所知 - 有几个特定于IE的问题。
在文件contentflow.js
中,有一个addReflection: function()
。
有一些条件逻辑由行if (this.Browser.IE)
限定。显然,IE实现在图像反射上窒息。
我的解决方案是简单地注释掉会为IE创建反射的代码 - 这样做就是通过与else
相关的if (this.Browser.IE)
注释掉所有内容并添加{{1在if (!this.Browser.IE)
。
在决定显示ContentFlow对象之前,IE还没有等到所有图像都已下载之后也存在问题。在else
部分,将var ContentFlowItem = function (CFobj, element, index) {
替换为if (this.Browser.IE && !this.content.onload)
。
最终结果是您在IE中的图像下方丢失了反射,但所有图片都会加载,并且更新更多更顺畅。
其他调整可能包括更改Contentflow if (!this.content.onload)
文件夹(img
和slider_white.png
)中两个图像文件的颜色,以帮助它们在白色背景上更好地显示。
如果使用scrollbar_white.png
而不是最小化的JS文件`contenflow.js,则可能更容易检查。
答案 2 :(得分:0)
我在IE中遇到了与ContentFlow类似的问题。我添加了一些自定义的ajax-paging,并希望手动初始化ContentFlow。我认识到,每当我的init无法工作时,ContentFlow都会被库初始化。我在方法 ContentFlowGlobal.onloadInit()中做了这个部分:
/* init the rest */
var divs = document.getElementsByTagName('div');
DIVS: for (var i = 0; i < divs.length; i++) {
if (divs[i].className.match(/\bContentFlow\b/)) {
for (var j=0; j<ContentFlowGlobal.Flows.length; j++) {
if (divs[i] == ContentFlowGlobal.Flows[j].Container) continue DIVS;
}
var CF = new ContentFlow(divs[i],{}, false);
CF.init();
}
}
依赖于我自己设置的布尔值。
直到我发现那部分,我的初始化只包括:
var flow = new ContentFlow(id, opions);
之后,我补充道:
flow.init();
为我修好了。 我希望这也可以帮助你。
丹尼尔