#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>