Выполнение кнопки загрузки в течение нескольких секунд - PullRequest
1 голос
/ 08 января 2020

я сам определил кнопку загрузки. Если пользователь нажимает кнопку, кнопка загрузки должна отображаться в течение нескольких секунд, а затем больше не должна отображаться, пока кнопка не будет нажата снова.

Этот код показывает пример принципа работы.

HTML:

<div id="loader" style="display:none"></div>
<button class="button" onclick="load()">Loading Button</button>

CSS:

#loader {
    position: absolute;
    left: 50%;
    top: 50%;
    z-index: 1;
    width: 150px;
    height: 150px;
    margin: -75px 0 0 -75px;
    border: 16px solid #f3f3f3;
    border-radius: 50%;
    border-top: 16px solid #3498db;
    width: 120px;
    height: 120px;
    -webkit-animation: spin 2s linear infinite;
    animation: spin 2s linear infinite;
}

@-webkit-keyframes spin {
    0% { -webkit-transform: rotate(0deg); }
    100% { -webkit-transform: rotate(360deg); }
  }

  @keyframes spin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
  }

JS

function load() {
  document.getElementById("loader").style.display = "block";
  setTimeout(stop(), 5000)
}

function stop() {
  document.getElementById("loader").style.display = "none";
}

У меня проблема в том, что кнопка загрузки не вызывается, но никогда не отображается. Я предполагаю, что это потому, что элементы на странице обновляются после выполнения функций js, поэтому выполняется только последняя команда, относящаяся к идентификатору "loader".

Кто-нибудь знает способ рассмотрения также первой команды?

Спасибо за вашу помощь,

Boesinga

1 Ответ

1 голос
/ 08 января 2020
function load() {
  document.getElementById("loader").style.display = "block";
  setTimeout(stop(), 5000)
} 

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

function load() {
  document.getElementById("loader").style.display = "block";
  setTimeout(function(){
    document.getElementById("loader").style.display = "none"; }, 3000);
}

, в этом случае вы можете вызвать только одну функцию, и это будет работать

https://stackblitz.com/edit/js-yyokfc?file=index.html рабочий пример

Если вы используете XMLHttpRequest, установите style.display = "block" для счетчика в качестве его состояния по умолчанию и в функция запроса вызова функции остановки

let request = new XMLHttpRequest();
    request.open('GET', "" true);
 // This will be called after the response is received
    request.onload = function () {
      // stop spinner
         stop();
     // do stuff

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