Potrzebowałem tego i po kilku badaniach wymyśliłem to ( potrzebne jQuery ):
Najpierw zaraz po <body>
tagu dodaj to:
<div id="loading">
<img id="loading-image" src="images/ajax-loader.gif" alt="Loading..." />
</div>
Następnie dodaj klasę stylu dla elementu DIV i obrazu do swojego CSS:
#loading {
width: 100%;
height: 100%;
top: 0;
left: 0;
position: fixed;
display: block;
opacity: 0.7;
background-color: #fff;
z-index: 99;
text-align: center;
}
#loading-image {
position: absolute;
top: 100px;
left: 240px;
z-index: 100;
}
Następnie dodaj ten skrypt javascript do swojej strony (najlepiej na końcu strony, </body>
oczywiście przed tagiem zamykającym ):
<script>
$(window).load(function() {
$('#loading').hide();
});
</script>
Na koniec dostosuj położenie obrazu ładowania i background-colour
elementu div ładującego za pomocą klasy style.
To jest to, powinno działać dobrze. Ale oczywiście musisz ajax-loader.gif
gdzieś mieć . Gratisy tutaj . (Kliknij prawym przyciskiem myszy> Zapisz obraz jako ...)
$('#loading').hide();
przy każdym ładowaniu strony.Ten skrypt doda element div, który będzie obejmował całe okno podczas ładowania strony. Automatycznie wyświetli spinner ładujący tylko CSS. Poczeka na zakończenie ładowania okna (nie dokumentu), a następnie odczeka opcjonalne dodatkowe kilka sekund.
Kod modułu ładującego CSS z https://projects.lukehaas.me/css-loaders
źródło
$(window).on("load", handler)
uruchamia się po zakończeniu ładowania wszystkich obiektów DOM, w tym obrazów, skryptów, a nawet ramek iframe. Jeśli chcesz poczekać na załadowanie określonego obrazu, użyj$('#imageId').on("load", handler)
$( "#loadingDiv" ).remove();
z$( "#loadingDiv" ).hide();
i dodać$( "#loadingDiv" ).show();
wcześniejsetTimeout(removeLoader, 2000);
. Usunąłem element div, aby strona była lżejsza, ale ta poprawka umożliwia ponowne użycie.Obraz wczytywania strony z najprostszym efektem zanikania utworzony w JS:
źródło
Mam poniżej inne proste rozwiązanie, które doskonale mi się sprawdziło.
Przede wszystkim utwórz CSS o nazwie Lockon class, która jest przezroczystą nakładką wraz z ładowaniem GIF-a, jak pokazano poniżej
Teraz musimy utworzyć nasz element div z tą klasą, który zakrywa całą stronę jako nakładkę za każdym razem, gdy strona jest ładowana
Teraz musimy ukryć ten ekran tytułowy za każdym razem, gdy strona jest gotowa, i abyśmy mogli ograniczyć użytkownikowi możliwość klikania / uruchamiania dowolnego zdarzenia, dopóki strona nie będzie gotowa
Powyższe rozwiązanie będzie w porządku podczas ładowania strony.
Teraz pytanie brzmi po załadowaniu strony, za każdym razem, gdy klikniemy przycisk lub zdarzenie, które zajmie dużo czasu, musimy to pokazać w zdarzeniu kliknięcia klienta, jak pokazano poniżej
Oznacza to, że po kliknięciu tego przycisku drukowania (co zajmie dużo czasu, aby wygenerować raport), pokaże się nasz ekran tytułowy z GIF, który daje wynik, a gdy strona jest gotowa, powyżej okna funkcji ładowania uruchomią się i ukryją ekran okładki po pełnym załadowaniu ekranu.
źródło
Domyślnie zawartość,
display:none
a następnie program obsługi zdarzeń, który ustawia ją nadisplay:block
lub podobnie po pełnym załadowaniu. Następnie umieść element div, który jest ustawiony nadisplay:block
„Loading” w nim, i ustaw go nadisplay:none
ten sam program obsługi zdarzeń, co poprzednio.źródło
Cóż, w dużej mierze zależy to od tego, w jaki sposób ładujesz elementy potrzebne w `` wywołaniu intensywnym '', moja początkowa myśl jest taka, że wykonujesz te obciążenia za pośrednictwem ajax. Jeśli tak jest, możesz użyć opcji „beforeSend” i wykonać wywołanie Ajax w ten sposób:
EDYCJA Widzę, że w tym przypadku użycie jednej z
'display:block'/'display:none'
powyższych opcji w połączeniu z$(document).ready(...)
z jQuery jest prawdopodobnie najlepszym rozwiązaniem. Te$(document).ready()
oczekiwania funkcyjne dla całej struktury dokumentu mają być załadowane przed wykonaniem ( ale nie czekać na wszystkich nośnikach do obciążenia ). Zrobiłbyś coś takiego:źródło
beforeSend
isuccess
do każdego wywołania Ajax.Mój blog będzie działał w 100 proc.
źródło
Utwórz
<div>
element, który zawiera wiadomość o wczytywaniu, podaj<div>
identyfikator, a po zakończeniu ładowania treści ukryj<div>
:... lub w zwykłym JavaScript:
źródło
$("#myElement").hide()
łatwiejsze dla oczu?Oto jQuery, którego użyłem, który monitoruje wszystkie start / stop ajax, więc nie musisz dodawać go do każdego wywołania ajax:
CSS dla kontenera ładującego i treści (głównie z odpowiedzi mehyaa), a także
hide
klasa:HTML:
źródło
Na podstawie odpowiedzi @mehyaa, ale znacznie krótszej:
HTML (zaraz po
<body>
):CSS:
Javascript (jQuery, ponieważ już go używam):
źródło
hide()
elementu niż dlaremove()
niego, abyś mógł go ponownie użyć.Będzie to zsynchronizowane z wywołaniem interfejsu API. Gdy wywołanie interfejsu API zostanie wyzwolone, zostanie wyświetlony moduł ładujący. Po pomyślnym wywołaniu interfejsu API moduł ładujący jest usuwany. Można tego użyć do ładowania strony lub podczas wywołania interfejsu API.
CSS
źródło
dla drupal w pliku motywu custom_theme.theme
W pliku html.html.twig po pominięciu głównego linku do treści w treści
w pliku css
źródło