函数在firefox中是未定义的

时间:2011-12-27 13:58:03

标签: javascript firefox

好的,以下代码在IE7 +和Chrome中运行正常。 但出于某种原因,xfade在firefox中未定义

<html>
    <body>
        <div id="slider"></div>
        <script type="text/javascript">
var Klimateka = {
    Slider: function () {
        // Check if we have a slider div on page
        var slider = document.getElementById('slider');
        if (slider != null) {
            var images = ["slide-image-1.jpg", "slide-image-2.jpg", "slide-image-3.jpg", "slide-image-4.jpg"];
            var i = images.length;
            while (i) {
                i -= 1;
                var img = document.createElement("img");
                img.src = "images/" + images[i];
                slider.appendChild(img);
            }
            var d = document, imgs = new Array(), zInterval = null, current = 0, pause = false;
            imgs = d.getElementById("slider").getElementsByTagName("img");
            for (i = 1; i < imgs.length; i++) imgs[i].xOpacity = 0;
            imgs[0].style.display = "block";
            imgs[0].xOpacity = .99;

            setTimeout("xfade()", 3500);

            function xfade() {
                cOpacity = imgs[current].xOpacity;
                nIndex = imgs[current + 1] ? current + 1 : 0;

                nOpacity = imgs[nIndex].xOpacity;

                cOpacity -= .05;
                nOpacity += .05;

                imgs[nIndex].style.display = "block";
                imgs[current].xOpacity = cOpacity;
                imgs[nIndex].xOpacity = nOpacity;

                setOpacity(imgs[current]);
                setOpacity(imgs[nIndex]);

                if (cOpacity <= 0) {
                    imgs[current].style.display = "none";
                    current = nIndex;
                    setTimeout(xfade, 3500);
                } else {
                    setTimeout(xfade, 50);
                }

                function setOpacity(obj) {
                    if (obj.xOpacity > .99) {
                        obj.xOpacity = .99;
                        return;
                    }
                    obj.style.opacity = obj.xOpacity;
                    obj.style.MozOpacity = obj.xOpacity;
                    obj.style.filter = "alpha(opacity=" + (obj.xOpacity * 100) + ")";
                }
            }
        }
    },

    bar: function () {
    }
}; 

Klimateka.Slider();

             

我已经设置了一个用于测试的jsfiddler: http://jsfiddle.net/rTtKh/10/

3 个答案:

答案 0 :(得分:5)

This might only apply to Firefox

  在子块内声明时,

函数不会提升。

您在xfade块中声明if,但您在声明之前调用它:

setTimeout(xfade, 3500);

将函数声明放在最上面。

您必须对setOpacity内的xfade执行相同操作。 <-这不是必需的。

答案 1 :(得分:1)

修正您的行:setTimeout("xfade()", 3500);以匹配您的其他人:

setTimeout(xfade, 3500);

答案 2 :(得分:0)

改为使用setTimeout(xfade,3500)。