Почему это выполняется дважды? - PullRequest
0 голосов
/ 21 октября 2010

У меня есть такой код:

$(document).ready(function() {

    $("div #covert, div #coverb").height($(window).height() / 2 + 1);
    $(window).resize(function() {
        $("div #covert, div #coverb").height($(window).height() / 2 + 1);
        covconcr();
    });

    function covconcr() {
        $('div #covercon').css('left', $(window).width() / 2 - $('#covercon').width() / 2);
    }

    covconcr();

    function hidecover() {
        var goup = $('div #covert').height();
    }

    $("div #covercon").fadeOut("fast").fadeIn("fast").fadeOut("fast").fadeIn("fast").fadeOut("fast").fadeIn("fast").fadeOut("fast").fadeIn("fast").fadeOut("fast").delay(100).fadeIn("fast", function() {
        $(this).stop();
    });

    $('title').html('Drink86_browser.detection');

    var logoop;

    jQuery.each(jQuery.browser, function() {
        if ($.browser.msie) {
            $('div #covercon').delay(3000, function() {
                $(this).html("YOUR BROWSER IS: INTERNET EXPLORER.");
                $('title').html('Drink86_your.browser.is.internet.explorer');
            });
        }
        else if (!$.browser.msie) {
            function update() {
                //$('#site').load('site.php');
                $('div #covercon').html("YOUR BROWSER IS: " + jQuery.uaMatch(navigator.userAgent).browser + ".");
                covconcr();
                $('title').html('Drink86_your.browser.is.' + jQuery.uaMatch(navigator.userAgent).browser + ' ');

                function hidecov() {
                    $('title').html('Drink86_loading_files');
                    $('#covercon').html($('#loading').html());
                    covconcr();
                    var timer = setInterval(function() {
                        $("#loadingpro").html(Math.round($("#progress").width() / 4) + "%");
                    }, 20);
                    $("#progress").animate({
                        width: 400
                    }, 2000, function() {
                        $('title').html('Drink86_');
                        clearInterval(timer);
                        $('#covercon').delay(700).fadeOut('fast', function() {
                            //    if(logoop!="yes"){
                            $('#logobig').css('left', $(window).width() / 2 - $('#logobig').width() / 2).css('top', $(window).height() / 2 - $('#logobig').height() / 2);
                            $('#logobig').fadeIn(3000).delay(2500).fadeOut(3000);
                            logoop = "yes";
                            // }
                        });
                    });
                }
                setTimeout(hidecov, 1000);
            }
            setTimeout(update, 3100);
        }
    });
});

операция с #logobig (fadeIn и fadeOut) выполняется дважды.Зачем?у меня были предыдущие проблемы, похожие на те, но потом они были выполнены дважды только в Firefox.есть идеи почему?

Ответы [ 5 ]

4 голосов
/ 21 октября 2010

Я думаю, что ваша проблема в том, что вы перебираете коллекцию флагов браузера jQuery, что необязательно для выполнения того, что вы делаете.Если вы просматриваете страницу в Firefox, второе предложение вашего if / elseif будет выполняться в каждом цикле, так как значение никогда не меняется.Попробуйте удалить эту функцию из каждого цикла, чтобы она выглядела следующим образом:

if ($.browser.msie) {
    $('div #covercon').delay(3000, function() {
        $(this).html("YOUR BROWSER IS: INTERNET EXPLORER.");
        $('title').html('Drink86_your.browser.is.internet.explorer');
    });
} else if (!$.browser.msie) {
    function update() {
        //$('#site').load('site.php');
        $('div #covercon').html("YOUR BROWSER IS: " + jQuery.uaMatch(navigator.userAgent).browser + ".");
        covconcr();
        $('title').html('Drink86_your.browser.is.' + jQuery.uaMatch(navigator.userAgent).browser + ' ');

        function hidecov() {
            $('title').html('Drink86_loading_files');
            $('#covercon').html($('#loading').html());
            covconcr();
            var timer = setInterval(function() {
                $("#loadingpro").html(Math.round($("#progress").width() / 4) + "%");
            }, 20);
            $("#progress").animate({
                width: 400
            }, 2000, function() {
                $('title').html('Drink86_');
                clearInterval(timer);
                $('#covercon').delay(700).fadeOut('fast', function() {
                    //    if(logoop!="yes"){
                    $('#logobig').css('left', $(window).width() / 2 - $('#logobig').width() / 2).css('top', $(window).height() / 2 - $('#logobig').height() / 2);
                    $('#logobig').fadeIn(3000).delay(2500).fadeOut(3000);
                    logoop = "yes";
                    // }
                });
            });
        }
        setTimeout(hidecov, 1000);
    }
    setTimeout(update, 3100);
}
4 голосов
/ 21 октября 2010

О чем именно вы думали

jQuery.each(jQuery.browser, function() { ...

Это действительно не имеет смысла. Просто посмотрите на jQuery.browser (если нужно).

Кроме того, проверяем, является ли это IE в операторе «if», а затем, если это не IE в части «else», ну, опять же ...

Прямой ответ на ваш вопрос заключается в том, что jQuery.browser, вероятно, содержит две вещи, поэтому вы делаете это дважды.

2 голосов
/ 21 октября 2010

jQuery.each (jQuery.browser

Не перебирать каждый элемент в объекте 'browser'. Я подозреваю, что существует более одного объекта! $. Browser.msie

1 голос
/ 21 октября 2010

Вы вызываете setTimeout(hidecov, 1000) внутри update(), а затем setTimeOut(update, 3100) вне обновления, поэтому hidecov будет вызываться один раз через 1000 мс, затем update будет вызываться через 3100 мс, и там он будет делать другой setTimeout на hidecov в 1000 мс.

Я не уверен, что весь этот код пытается сделать, поэтому я не могу сказать вам, как его изменить, но я понимаю, почему hidecov вызывается дважды.

0 голосов
/ 21 октября 2010

Я не лучший в Javascript, так что я могу быть полностью отключен, но похоже, что hidecov может работать при вызове update, а затем снова, когда пройдет 1 секунда.

Использование firebug с точкой останова внутри hidecov должно указывать на то, когда он запускается.

...