функция не определена только в Firefox - PullRequest
4 голосов
/ 27 декабря 2011

хорошо, следующий код работает нормально в 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 ]

5 голосов
/ 27 декабря 2011

Это может относиться только к Firefox :

функции не поднимаются при объявлении внутри дочернего блока.

Вы объявляете xfadeвнутри блока if, но вы вызываете его до объявления:

setTimeout(xfade, 3500);

Поместите объявление функции сверху.

Вы должны сделать то же самое с setOpacity внутри xfade. <- В этом нет необходимости.

1 голос
/ 27 декабря 2011

Исправьте свою строку, которая говорит это: setTimeout("xfade()", 3500);, чтобы соответствовать другим:

setTimeout(xfade, 3500);
0 голосов
/ 27 декабря 2011

Вместо этого используйте setTimeout (xfade, 3500).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...