JavaScript location.reload () отключает синхронизацию через некоторое время, почему? - PullRequest
0 голосов
/ 10 ноября 2018

Я пытался добавить какой-то код к исходному php веб-сайта, чтобы изображение показывалось в течение 25 секунд, затем оно исчезало, затем показывалось, и оно исчезало и т. Д.

На моем macbook при тестировании с текущим кодом (см. Ниже) все, кажется, работает нормально, однако на большом дисплее в пабе, где он отображается, он начинает перезагружаться без синхронизации (не в цикле, я хочу его) если это имеет смысл).

Итак, что происходит сейчас, последнее отображаемое изображение исчезает, затем отображается первый элемент (другой скрипт), и только через несколько секунд страница перезагружается. Перезагрузка должна быть сразу после того, как последнее изображение будет скрыто.

<script>
    function displayAds() {
        $("#appjs").remove();           // Haal het app.js script weg zodat deze niet meer draait
        $(".container, .row").hide();   // Verberg de content van het klassement/scoreboard
        $("#ad-slides").show();         // Laat de container met ad-slides zien
        $("#slide-een").show();         // Laat de eerste slide zien

        setTimeout(displayAd2, 25000) // Roep de functie voor het laten zien van slide twee aan

    }

    // Deze functie laat, wanneer aangeroepen, de tweede ad slide zien
    function displayAd2() {
        $("#slide-een").hide();     // Verberg de eerste slide
        $("#slide-twee").show();    // Laat de tweede slide zien

        setTimeout(displayAd3, 25000) // Roep de functie voor het laten zien van slide drie aan
    }

    function displayAd3() {
        $("#slide-twee").hide();    // Verberg de tweede slide
        $("#slide-drie").show();    // Laat de derde slide zien

        setTimeout(hideAds, 25000); // Roep hideAds aan na 25 sec om de ads te verbergen en dus het klassement te tonen
    }

    function hideAds() {
        $(".ads").hide();
        $("#ad-slides").hide();
        var assetsssss = "{{ asset('js/app.js') }}"; // Dit is het app js script nu
        $("body").append('<script src="'+assetsssss+'" id="appjs"></script\>'); // Voeg het app js script toe onderaan de pagina zodat deze weer draait
        $(".container, .row").show();// Maak de score content weer zichtbaar

        //setTimeout(displayAds, 90000)  // Begin de loop weer opnieuw na 90 seconden
        location.reload(true);
    }

    // Hier begint het script
       $(document).ready( function() {
       $("#ad-slides").hide();  // Verberg de ad-slides container
       $(".ads").hide();        // Verberg alle ad slides

       setTimeout(displayAds, 90000); // Roep na 90 sec van het laden van de pagina de functie voor het tonen van de eerste slide aan
    });
</script>

Итак, я не знаю, почему через некоторое время он начинает отключаться от синхронизации. Заранее спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Проблема в том, что вы выполняете бесконечный цикл перезагрузки при каждой перезагрузке locación.reload(true) называется обновлением страницы, и все сценарии загружаются снова, затем displayAds, displayAds2 и т. Д. Снова выполняются, потому что все они выполняются по цепочке из-за setTimeout, и когда вы перезагружаете страницу, функция $.document.ready снова запускается. Вот почему вы находитесь в цикле перезагрузки

0 голосов
/ 10 ноября 2018

Таймеры Javascript не гарантированно срабатывают точно в указанное вами время. Они стреляют как можно скорее после этого .

Для более глубокого чтения, ознакомьтесь с документами MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop

...