Acest lucru este un pic cam greu de explicat, Așa că voi încerca să fac tot ce pot
Deci, în timp ce o pagină HTML se încarcă, aș vrea să apară un ecran de încărcare interesant. Când se termină de încărcat, vreau ca ecranul de încărcare să se șteargă și să fie afișat documentul HTML.
Practic, vreau ca acest lucru:
CSS:
/* Absolute Center CSS Spinner */
.loading {
position: fixed;
z-index: 999;
height: 2em;
width: 2em;
overflow: show;
margin: auto;
top: 0;
left: 0;
bottom: 0;
right: 0;
}
/* Transparent Overlay */
.loading:before {
content: '';
display: block;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.3);
}
/* :not(:required) hides these rules from IE9 and below */
.loading:not(:required) {
/* hide "loading..." text */
font: 0/0 a;
color: transparent;
text-shadow: none;
background-color: transparent;
border: 0;
}
.loading:not(:required):after {
content: '';
display: block;
font-size: 10px;
width: 1em;
height: 1em;
margin-top: -0.5em;
-webkit-animation: spinner 1500ms infinite linear;
-moz-animation: spinner 1500ms infinite linear;
-ms-animation: spinner 1500ms infinite linear;
-o-animation: spinner 1500ms infinite linear;
animation: spinner 1500ms infinite linear;
border-radius: 0.5em;
-webkit-box-shadow: rgba(0, 0, 0, 0.75) 1.5em 0 0 0, rgba(0, 0, 0, 0.75) 1.1em 1.1em 0 0, rgba(0, 0, 0, 0.75) 0 1.5em 0 0, rgba(0, 0, 0, 0.75) -1.1em 1.1em 0 0, rgba(0, 0, 0, 0.5) -1.5em 0 0 0, rgba(0, 0, 0, 0.5) -1.1em -1.1em 0 0, rgba(0, 0, 0, 0.75) 0 -1.5em 0 0, rgba(0, 0, 0, 0.75) 1.1em -1.1em 0 0;
box-shadow: rgba(0, 0, 0, 0.75) 1.5em 0 0 0, rgba(0, 0, 0, 0.75) 1.1em 1.1em 0 0, rgba(0, 0, 0, 0.75) 0 1.5em 0 0, rgba(0, 0, 0, 0.75) -1.1em 1.1em 0 0, rgba(0, 0, 0, 0.75) -1.5em 0 0 0, rgba(0, 0, 0, 0.75) -1.1em -1.1em 0 0, rgba(0, 0, 0, 0.75) 0 -1.5em 0 0, rgba(0, 0, 0, 0.75) 1.1em -1.1em 0 0;
}
/* Animation */
@-webkit-keyframes spinner {
0% {
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-ms-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-moz-transform: rotate(360deg);
-ms-transform: rotate(360deg);
-o-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@-moz-keyframes spinner {
0% {
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-ms-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-moz-transform: rotate(360deg);
-ms-transform: rotate(360deg);
-o-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@-o-keyframes spinner {
0% {
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-ms-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-moz-transform: rotate(360deg);
-ms-transform: rotate(360deg);
-o-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes spinner {
0% {
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-ms-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-moz-transform: rotate(360deg);
-ms-transform: rotate(360deg);
-o-transform: rotate(360deg);
transform: rotate(360deg);
}
}
HTML:
<div class="loading">Loading…</div>
să se întâmple în timp ce pagina se încarcă. când pagina se încarcă, Asta se șterge, iar restul documentului HTML este afișat. (Fac un sistem de credite și în timp ce creditele se încarcă am nevoie doar să spun că se încarcă, oamenii se plâng că nu pot da click pe nimic și trebuie să le spun tuturor că doar se încarcă)
Aș vrea să stau cât mai departe de Ajax deoarece aș vrea să învăț Javascript.
Puteți aștepta până când corpul este pregătit:
Aici este un JSFiddle care demonstrează această tehnică.
- Puteți ajusta timpul de așteptare pentru intervalul de timp pentru a face ca încărcarea să fie mai rapidă sau mai lentă. – > .
- Mulțumesc. Deși poate fi un pic cam falsă, pare cool și se va lipi de o singură pagină. Mulțumesc mult. Voi încerca și voi vedea dacă funcționează. – > .
- Verificat. Arată destul de bine! Din nou, vă mulțumesc pentru tot ajutorul pe care l-ați făcut. – > .
- @MarkieJonesWTF Dacă doriți să aflați mai multe despre unitățile de dimensionare, cum ar fi
rem
, ,vh
, , șivw
atunci ar trebui să consultați A List Apart: Învățați să iubiți părțile plictisitoare din CSS. – > . - În vioara ta – cum se rotește ecranul de încărcare? Nu am găsit nici un keyframes, resurse suplimentare sau cod, care să facă acest lucru să se întâmple. Magie? 🙂 – > .
La începutul scriptului de încărcare, faceți doar ca
vizibil prin css [display:block;
] și faceți restul paginii invizibil prin css[display:none;
].
După ce încărcarea este gata, doar faceți invizibilă încărcarea și pagina vizibilă din nou cu aceeași tehnică. Puteți folosi document.getElementById() pentru a selecta div-urile cărora doriți să le schimbați afișarea.
Edit: Iată cum ar arăta oarecum. Când corpul termină de încărcat, va apela funcția javascript care va schimba valorile de afișare ale diferitelor elemente. În mod implicit, stilul tău ar fi ca pagina să nu fie vizibilă la încărcare vizibilă.
<head>
<style>
#page{
display: none;
}
#loading{
display: block;
}
</style>
<script>
function myFunction()
{
document.getElementById("page").style.display = "block";
document.getElementById("loading").style.display = "none";
}
</script>
</head>
<body onload="myFunction()">
<div id="page">
</div>
<div id="loading">
</div>
</body>
- Acest lucru pare un pic confuz, deoarece sunt nou în Javascript. (Și nu am folosit niciodată Ajax înainte, așa că nu-mi spuneți să îl folosesc) Ați putea să îmi explicați puțin mai mult despre document.getElementById() și să îmi dați un exemplu, vă rog? – > .
- Hm. Ori de câte ori îmi încarc pagina, apare complet goală, ca și cum nu s-ar fi încărcat, dar Firefox spune că s-a încărcat. – > .
Pentru a construi mai departe pe partea ajax pe care o puteți folosi sau nu (din comentarii)
o modalitate simplă de a încărca o altă pagină și de a o înlocui cu cea actuală este:
<script>
$(document).ready( function() {
$.ajax({
type: 'get',
url: 'http://pageToLoad.from',
success: function(response) {
// response = data which has been received and passed on to the 'success' function.
$('body').html(response);
}
});
});
<script>
Dacă în site-ul dvs. aveți apeluri ajax care încarcă niște date, iar acesta este motivul pentru care pagina se încarcă lent, cea mai bună soluție pe care am găsit-o este cu
$(document).ajaxStop(function(){
alert("All AJAX requests completed");
});
https://jsfiddle.net/44t5a8zm/ – aici puteți adăuga câteva apeluri ajax și să testați.
Aș sugera adăugarea clasei no-js
în html pentru a vă anina selectorii CSS sub ea, de exemplu:
.loading {
display: none;
}
.no-js .loading {
display: block;
//....
}
și când ați terminat de încărcat codul de credit să o eliminați:
$('html').removeClass('no-js');
Acest lucru va ascunde spinner-ul de încărcare, deoarece nu există nici un no-js
clasa în html înseamnă că ați încărcat deja codul de credit
- Îndepărtează stilul, dar nu îndepărtează <div> pentru rotiță. – > .
- De ce trebuie să eliminați <div>? este posibil să aveți nevoie să îl afișați din nou atunci când încărcați un alt cod de credit. în acest caz, veți adăuga doar
no-js
clasa în html$('html').addClass('no-js');
fără a fi nevoie să recreezi din nou <div> spinner – > . - Dacă div-ul nu este eliminat, va arăta doar „Loading….” în partea de jos a creditelor, și nu vreau să se strice așa. – > .
- Sunteți sigur că eliminați
no-js
clasa din html și adăugați.loading { display: none; }
la CSS? – > .
Această metodă utilizează clasa WindowOrWorkerGlobalScope.setInterval
(https://developer.mozilla.org/en-US/doc) pentru a urmări stările de pregătire ale documentului & vedeți dacă <body>
există.
// Function > Loader Screen Script
(function LoaderScreenScript(window = window, document = window.document, undefined = window.undefined || void 0) {
// Initialization > (Processing Time, Condition, Timeout, Loader (...))
let processingTime = 0,
condition = function() {
// Return
return document.body
},
timeout = function() {
// Return
return (processingTime * 1e3) / 2
},
loaderScreenFontSize = typeof window.loaderScreenFontSize != 'undefined' ? window.loaderScreenFontSize : 14,
loaderScreenMargin = typeof window.loaderScreenMargin != 'undefined' ? window.loaderScreenMargin : 10,
loaderScreenMessage = typeof window.loaderScreenMessage != 'undefined' ? window.loaderScreenMessage : 'Loading, please wait…',
loaderScreenOpacity = typeof window.loaderScreenOpacity != 'undefined' ? window.loaderScreenOpacity : .75,
loaderScreenTransition = typeof window.loaderScreenTransition != 'undefined' ? window.loaderScreenTransition : .675,
loaderScreenWidth = typeof window.loaderScreenWidth != 'undefined' ? window.loaderScreenWidth : 7.5;
// Function > Update
function update() {
// Set Timeout
setTimeout(function() {
// Initialization > (Data, Metadata)
var data = document.createElement('loader-screen-element'),
metadata = setInterval(function() {
/* Logic
[if:else if:else statement]
*/
if (document.readyState == 'complete') {
// Alpha
alpha();
// Test
test()
}
});
// Insertion
document.body.appendChild(data);
// Style > <body> > Overflow
document.body.style = ('overflow: hidden !important; pointer-events: none !important; user-drag: none !important; user-select: none !important;' + (document.body.getAttribute('style') || ' ')).trim();
// Modification > Data
// Inner HTML
data.innerHTML =
'<style media=all type=text/css>' +
'body::selection {' +
'background-color: transparent !important;' +
'text-shadow: none !important' +
'} ' +
'@keyframes rotate {' +
'0% { transform: rotate(0) }' +
'to { transform: rotate(360deg) }' +
'}' +
'</style>' +
"<div style='animation: rotate 1s ease-in-out 0s infinite backwards; border: " + loaderScreenWidth + "px solid rgba(0, 0, 0, " + loaderScreenOpacity + "); border-top-color: rgba(0, 51, 255, " + loaderScreenOpacity + "); border-radius: 50%; height: 75px; margin: 0 auto; margin-bottom: " + loaderScreenMargin + "px; width: 75px'> </div>" +
"<small style='color: rgba(127, 127, 127, .675); font-family: "Open Sans", "Calibri Light", Calibri, sans-serif; font-size: " + loaderScreenFontSize + "px !important; margin: 0 auto; margin-top: " + loaderScreenMargin + "px; text-align: center'> " + loaderScreenMessage + " </small>";
// Style
data.style = 'align-items: center; background-color: rgba(255, 255, 255, .98); display: flex; flex-direction: column; height: ' + innerHeight + 'px; justify-content: center; left: 0; margin: auto; max-height: 100% !important; max-width: 100% !important; min-height: 100vh; min-width: 100vh; position: fixed; top: 0; transition: ' + loaderScreenTransition + 's ease-in-out; width: ' + innerWidth + 'px; z-index: 2147483647';
// Function
// Alpha
function alpha() {
// Clear Interval
clearInterval(metadata)
};
// Test
function test() {
// Style > Data
// Background Color
data.style.backgroundColor = 'transparent';
// Opacity
data.style.opacity = 0;
// Set Timeout
setTimeout(function() {
// Deletion
data.remove();
// Modification > <body> > Style
document.body.style = document.body.getAttribute('style').replace('overflow: hidden !important;', '').replace('pointer-events: none !important;', '').replace('user-drag: none !important;', '').replace('user-select: none !important;', '');
(document.body.getAttribute('style') || '').trim() || document.body.removeAttribute('style')
}, ((+getComputedStyle(data).getPropertyValue('animation-delay').replace(/[a-zA-Z]/g, '').trim() + +getComputedStyle(data).getPropertyValue('animation-duration').replace(/[a-zA-Z]/g, '').trim() + +getComputedStyle(data).getPropertyValue('transition-delay').replace(/[a-zA-Z]/g, '').trim() + +getComputedStyle(data).getPropertyValue('transition-duration').replace(/[a-zA-Z]/g, '').trim()) * 1e3) + 100);
}
}, timeout())
};
/* Logic
[if:else if:else statement]
*/
if (condition())
// Update
update();
else {
// Initialization > Data
var data = setInterval(function() {
/* Logic
[if:else if:else statement]
*/
if (condition()) {
// Update > Processing Time
processingTime += 1;
// Update
update();
// Metadata
metadata()
}
});
// Function > Metadata
function metadata() {
// Clear Interval
clearInterval(data);
/* Logic
[if:else if:else statement]
> Deletion
*/
if ('data' in window && typeof data == 'undefined')
delete window.data
}
}
})(window, window.document, window.undefined || void 0)
Acest ecran de preîncărcare a fost realizat de Lapys @ https://github.com/LapysDev
<html>
<div id="filter"></div>
<div id="load"></div>
<input type="button" value="Submit" onclick="myFunction()">
</html>
<style type="text/css">
*{
margin:0;
}
#load{
width:35px;
height:35px;
border-radius:50%;
border:2px solid #f3f3f3;
border-top:2px solid blue;
margin:auto;
right:0;
left:0;
top:40%;
position:fixed;
animation:load 1s linear infinite;
display:none;
}
@keyframes load{
0%{transform:rotate(0deg)}
100%{transform:rotate(360deg)}
}
#filter{
width:100%;
height:100%;
background:rgba(0, 0, 0, 0.5);
position:fixed;
display:none;
}
</style>
<script>
function myFunction(){
document.getElementById('filter').style.display="block";
document.getElementById('load').style.display="block";
window.location="location...";
}
</script>
success:
opțiune. De asemenea, chiar dacă nu se încarcă cu adevărat, utilizatorii finali nu vor fi niciodată mai înțelepți, deoarece tehnologia i-a învățat pe mulți utilizatori că va exista un proces de încărcare sau de inițiere. – > Por Renașterea.