Если нужно сделать прелоадер не по времени загрузки всех ассетов, а по таймеру подойдет следующий код
<div class="vk-preloader">
<style type="text/css" scoped>
.vk-preloader {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
background: #bbb;
text-align: center;
font-family: Helvetica, Arial, Verdana, Tahoma, sans-serif;
font-size: 50px;
font-weight: bold;
color: #333;
}
.vk-preloader.hidden {
opacity: 0;
transition: opacity 2s;
}
.vk-preloader.none {
display: none;
}
</style>
Hello World
</div>
<script>
const TIME_TO_WAIT = 4;
const preloader = document.querySelector('.vk-preloader');
const removePreloader = function() {
preloader.classList.add("none");
preloader.removeEventListener('transitionend', removePreloader);
};
const hidePreloader = function() {
preloader.classList.add("hidden");
preloader.addEventListener('transitionend', removePreloader);
};
if (preloader) {
setTimeout(hidePreloader, TIME_TO_WAIT * 1000);
}
</script>
Если нужно отслеживать загрузку всех ассетов то последние три строки нужно заменить
if (preloader) {
window.addEventListener('load', (event) => {
hidePreloader()
});
}