ContentFlow javascript插件不在IE中加载,但在所有非IE浏览器中加载

时间:2011-08-15 14:17:57

标签: javascript

我一直在修补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中对这个特定库进行故障排除的好方法?

3 个答案:

答案 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)文件夹(imgslider_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();

为我修好了。 我希望这也可以帮助你。

丹尼尔