Очень не изящный обходной путь - использовать CSS анимацию, которая заставляет "автономный" элемент появляться сразу после заданного промежутка времени. С JavaScript вы можете непрерывно сбрасывать анимацию, предотвращая ее отображение, если только / 10 * * больше не запускается для ее сброса.
Для анимации в приведенном ниже примере установлено значение 3 секунды, и использует ключевые кадры, чтобы оставаться на opacity:0
до 99% продолжительности анимации, после чего она меняется на opacity:1
.
В JavaScript мы можем сбрасывать анимацию каждые 1-2 секунды с помощью JavaScript удалив связанный с ним класс, принудительно перекомпоновав (например, извлекая offsetWidth ), а затем добавив обратно класс анимации.
В идеале на этих мобильных устройствах Chrome можно было бы вообще не кэшировать страницу. Различные заголовки, которые мы опробовали в комментариях к этому вопросу, не были учтены мобильным устройством без доступа к Inte rnet.
Отключение кэширования было бы более подходящим решением как по концепции, так и по исполнению. Имеющий интервал JavaScript, который постоянно вызывает переворачивание, не велик. Но он дает пользователю представление о том, что двигатель JavaScript прекратил работу, как и здесь.
В приведенном ниже примере кнопка «Simulate stop JS» просто очищает интервал, который продолжает сбрасывать загрузочную анимацию. Это только симуляция, но она имеет тот же эффект, что и JavaScript, который не запущен (проверено на изолированном сервере).
const overlay = document.getElementById('offline-overlay');
const stopJS = document.getElementById('stopJS');
const heartbeat = () => {
overlay.classList.remove("animate-overlay");
void overlay.offsetWidth;
overlay.classList.add("animate-overlay");
}
const heartbeatInterval = setInterval( heartbeat, 1000);
stopJS.addEventListener("click", function(){
clearInterval(heartbeatInterval);
});
@keyframes offline {
0% {opacity:0;}
99% {opacity:0;}
100% {opacity:1;}
}
.animate-overlay{
animation-name: offline;
animation-duration: 3s;
}
#offline-overlay{
background-color: rgba(255,255,255,.9);
position:absolute;
top:0;
left:0;
right:0;
bottom:0;
display:flex;
justify-content: center;
align-items:center;
pointer-events:none;
}
#offline-overlay span{
font-size:300%;
font-family: sans-serif;
letter-spacing:5px;
color: #888;
}
<div id="offline-overlay" class="animate-overlay">
<span>OFFLINE</span>
</div>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam varius quam sed nulla feugiat varius. Praesent vitae mi et libero porttitor maximus. Suspendisse eu pulvinar quam. Phasellus id ante a elit faucibus cursus. Curabitur porttitor vehicula ornare. Suspendisse nec risus ex. Aenean bibendum auctor ex eget aliquet. Donec laoreet sem ut tortor viverra aliquam.</p>
<button id="stopJS">Simulate Stop JS</button>