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

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

Мой код такой:

 if (speedMbps < low) {
                
                //call the function to open pop-up
                popup_speedtest();
            }

...

function popup_speedtest() {
//make the pop-up opens in vbhtml
$("#alert_speedtest").modal('toggle');
}

Я думал об этом

setTimeout(function() {
//make the pop-up opens in vbhtml
$("#alert_speedtest").modal('toggle');
}, 60000);

Но это не позволяет всплывающему окну открываться в первый раз, а также каждый раз, когда функция запускает этот сброс setTimeout.

Любые идеи?

0
Silvia 9 Фев 2021 в 15:58

1 ответ

Лучший ответ

Вы хотите отслеживать состояние отображения модального окна. Добавьте переменную для чего-то вроде этого:

let shownModal = false;

Затем, когда вы показываете модальное окно, проверьте и / или обновите переменную и установите 1-минутный таймер для сброса переменной. Что-то вроде этого:

if (speedMbps < low) {
    if (!shownModal) {
        shownModal = true;
        popup_speedtest();
        setTimeout(function() {
            shownModal = false;
        }, 60000);
    }
}

Таким образом, он выполняет логику только в том случае, если состояние в настоящее время равно false, а логика состоит в том, чтобы установить состояние на true, показать модальное окно и установить тайм-аут для возврата состояния в false .

1
David 9 Фев 2021 в 13:07