jQuery, если страница загружена и прошло время

#javascript #jquery #if-statement

#javascript #jquery #if-оператор

Вопрос:

Привет,

Мне просто нужен простой оператор if, который проверяет, загружена ли вся страница window.loaded и прошло ли определенное количество секунд time.passed . Я не хочу запускать счетчик time.passed при загрузке окна… мне просто нужен оператор if, который проверяет, верно ли значение window amp;amp; time.

Возможно ли это?

Вот мой неправильный код мечты

 if (window.loaded == true amp;amp; time.passed == 3000) {
    // do something
}
  

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

Комментарии:

1. Другими словами, вы хотите рассчитать время загрузки страницы?

2. Это для предварительного загрузчика, и если сайт загружен, но анимация предварительного загрузчика еще не завершена, он все равно должен отображаться. Вот почему мне нужно окно. загрузка amp;amp; time.passed

Ответ №1:

 var isLoadedAndTimePassed = false;

function run() {
  isLoadedAndTimePassed = true;
  console.log('loaded and time passed');
}

var time = (new Date()).getMilliseconds(), 
    wait = 3000;

window.addEventListener('load', function load() {
  window.removeEventListener('load', load);
  time = (new Date()).getMilliseconds() - time;
  if (time < wait) {
    window.setTimeout(run, wait - time);
  } else {
    run();
  }
});  

Комментарии:

1. исправление: это не сработает, если загрузка окна занимает больше времени, чем установленный таймер. Если окно загружено, таймер начинает отсчет с этого момента (что не то, что я искал)

2. Нет, таймер не запустится, если время загрузки слишком велико.

Ответ №2:

Благодаря @NoSkill я сам нашел ответ. Несмотря на то, что его скрипт работал не так, как предполагалось, я использовал его и переписал в jQuery. Теперь это работает так, как я хочу.

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

Вот код:

 // counter to check if the script works as intended
var startTime = new Date();
setInterval(function () {
  $('span').html("ms since the start: "   (new Date() - startTime));
}, 100);

// the actual script
function run() {
  $('p').html('site loaded and 15s passed');
}    

var time = new Date(), 
    wait = 15000;

$(window).load(function(){
    var currenttime = new Date() - time;
    if (currenttime < wait) { setInterval(run, wait - currenttime); }
    else { run(); console.log(currenttime); }
});  
 img {
  width:100%;
}  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>

<span></span>
<p></p>
<img src="https://effigis.com/wp-content/uploads/2015/02/Airbus_Pleiades_50cm_8bit_RGB_Yogyakarta.jpg">

</body>
</html>