поэтому я относительно новичок в программировании, и я хотел создать загрузчик, который всякий раз, когда страница загружается или обновляется, показывает центрированную анимацию загрузки, которая становится серой и исчезает вся страница, а затем все возвращается к норме, когда страница полностью загружается.
мне удалось заставить все остальное работать, кроме центрирования анимации и затухания / серого цвета страницы. idk, если я упускаю что-то действительно очевидное, но я искал везде, и я не совсем получил то, что хотел.
вот html
<!DOCTYPE html>
<html lang = "en">
<meta charset = "utf-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1">
<link rel = "stylesheet" href = "style.css">
<script src = "script.js"></script>
<link href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel = "stylesheet">
<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
<head>
<meta http-equiv = "X-UA-Compatible" content = "IE=edge">
<title>S&B Clothes</title>
<link rel = "icon" type = "image/x-icon" href = "logo/icons8-needle-96.png">
</head>
<body id = "body">
<!--Navbar-->
<nav class = "navbar navbar-expand-sm sticky-top" id = "navbar1">
<div class = "container-fluid">
<a class = "navbar-brand" href = "index.html">
<img src = "logo/logo_svg.svg" class = "rounded" id = "navbar_logo">
</a>
<button class = "navbar-toggler" type = "button" data-bs-toggle = "collapse" data-bs-target = "#men_women">
<div class = "container_menu" onclick = "menu(this)">
<div class = "bar1"></div>
<div class = "bar2"></div>
<div class = "bar3"></div>
</div>
</button>
<div class = "collapse navbar-collapse" id = "men_women">
<ul class = "navbar-nav me-auto">
<li class = "nav-item">
<button type = "button" class = "btn" onclick = "women_index_fn()" id = "navbar_men">Women</button>
</li>
<li>
<vr class = "vr"></vr>
</li>
<li class = "nav-item">
<button type = "button" class = "btn" onclick = "children_index_fn()" id = "navbar_women">Children</button>
</li>
</li>
<li>
<vr class = "vr"></vr>
</li>
<li class = "nav-item">
<button type = "button" class = "btn" onclick = "men_index_fn()" id = "navbar_children">Men</button>
</li>
</ul>
</div>
<div class = "input-group rounded">
<input type = "search" class = "form-control rounded" placeholder = "Search" aria-label = "Search" aria-describedby = "search-addon" />
<button type = "button" class = "btn rounded" id = "src_btn">Search</button>
</div>
<div>
<button class = "btn" id = "user_btn" onmouseover = "change_img_user()" onmouseout = "change_img_user_2()">
<img src = "Icons/user-white.png" id = "user_btn_ico"/>
</button>
</div>
<div>
<button class = "btn" id = "favorite_btn" onmouseover = "change_img_fav()" onmouseout = "change_img_fav_2()">
<img src = "Icons/favorite-white.png" id = "favorite_btn_ico"/>
</button>
</div>
<div>
<button class = "btn" id = "shop_cart_btn" onmouseover = "change_img_cart()" onmouseout = "change_img_cart_2()">
<img src = "Icons/shopping-cart-white.png" id = "shop_cart_ico"/>
</button>
</div>
</div>
</nav>
<!--Loader-->
<div class = "preloader" id = "ld">
<div class = "box">
<div class = "box__inner">
<div class = "box__back-flap"></div>
<div class = "box__right-flap"></div>
<div class = "box__front-flap"></div>
<div class = "box__left-flap"></div>
<div class = "box__front"></div>
</div>
</div>
<div class = "box">
<div class = "box__inner">
<div class = "box__back-flap"></div>
<div class = "box__right-flap"></div>
<div class = "box__front-flap"></div>
<div class = "box__left-flap"></div>
<div class = "box__front"></div>
</div>
</div>
<div class = "line">
<div class = "line__inner"></div>
</div>
<div class = "line">
<div class = "line__inner"></div>
</div>
<div class = "line">
<div class = "line__inner"></div>
</div>
<div class = "line">
<div class = "line__inner"></div>
</div>
<div class = "line">
<div class = "line__inner"></div>
</div>
<div class = "line">
<div class = "line__inner"></div>
</div>
<div class = "line">
<div class = "line__inner"></div>
</div>
вот js
window.addEventListener("load", function()
{
var loader = document.getElementById("ld");
loader.style.display = "none";
})
все, что я сделал до сих пор, это просто стиль загрузчика и раскраска, ничего не связанного с позиционированием.
я попытался поместить свой загрузчик в контейнер и отцентрировать его, но это не сработало, как планировалось, и панель навигации не стала серой
Спасибо вам всем



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Хорошо, вы спрашиваете, как создать наложение и центрировать загрузочный виджет посередине экрана. Есть много способов сделать это, вот один из них.
function removeOverlay() {
const overlay = document.querySelector('#overlay');
overlay.classList.remove('show');
document.body.style.overflow = 'auto';
}body {
overflow: hidden;
}
#overlay {
background-color: rgba(255,255,255,0.7);
display: none;
position: absolute;
bottom: 0;
top: 0;
left: 0;
right: 0;
z-index: 2;
}
#overlay.show {
display: block;
}
#overlay-container {
align-items: center;
justify-content: center;
display: flex;
flex-direction: column;
height: 100%;
}<article>
<header><h2>My Article</h2></header>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam
</p>
</article>
<div id = "overlay" class = "show">
<div id = "overlay-container">
<h3>Loading ...</h3>
<p>Place your loading widget in the overlay-container</p>
<button onclick = "removeOverlay()">Remove Overlay</button>
</div>
</div>@Bilal В css для #overlay попробуйте следующее: удалите «bottom: 0» и добавьте «height: 100vh». Возможно, ваш #overlay div помещен в контейнер с «положением: относительно». Элемент с «position: absolute» ограничен границами своего родителя, если у родителя есть «position: relative»
@Bilal Я только что увидел, что в моем примере оверлей обрезается внизу экрана, но высота прокрутки больше, поэтому нижняя часть содержимого не закрыта. Я исправлю свой пример.
@Bilal Хорошо, я исправил это. В css я добавил к тегу body свойство «overflow: hidden», которое предотвращает прокрутку. Затем в функции removeOverlay() я установил для переполнения тега body значение «auto».
во-первых, я хотел бы поблагодарить вас за вашу помощь, я только что столкнулся с небольшой проблемой. серое наложение, кажется, не покрывает всю страницу, поэтому, когда оно загружается, нижняя часть не покрыта