sirve - Pantalla de carga de JavaScript mientras se carga la página
mostrar loading mientras carga pagina jquery (6)
Esto es un poco difícil de explicar, así que lo intentaré lo mejor posible
Entonces, mientras se carga una página HTML, me gustaría que haya una buena pantalla de carga. Cuando termine de cargar, quiero que la pantalla de carga se borre y que se muestre el documento HTML.
Básicamente, quiero esto:
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>
estar sucediendo mientras se carga la página. cuando la página se carga, se borra y se muestra el resto del documento HTML. (Estoy creando un sistema de créditos y mientras los créditos se cargan solo necesito decir que se está cargando, la gente se queja de que no pueden hacer clic en nada y tengo que decirles que solo está cargando)
Me gustaría mantenerme alejado de Ajax tanto como sea posible ya que me gustaría aprender Javascript.
Al comienzo de su script de carga, solo haga su
visible a través de css [ display:block;
] y hacer que el resto de la página sea invisible a través de css [ display:none;
]
Una vez que se realiza la carga, simplemente haga que la carga sea invisible y la página visible nuevamente con la misma técnica. Puede usar document.getElementById () para seleccionar los divs que desea cambiar la visualización.
Editar: Así es como se vería. Cuando el cuerpo termine de cargar, llamará a la función javascript que cambiará los valores de visualización de los diferentes elementos. Por defecto, su estilo sería tener la página no visible, la carga visible.
<head>
<style>
#page{
diplay:none;
}
#laoding{
display:block;
}
</style>
<script>
function myFunction()
{
document.getElementById("page").style.display = "block";
document.getElementById("loading").style.diplay = "none";
}
</script>
</head>
<body onload="myFunction()">
<div id="page">
</div>
<div id="loading">
</div>
</body>
Este método usa el método WindowOrWorkerGlobalScope.setInterval
( https://developer.mozilla.org/en-US/doc ) para rastrear los estados listos del documento y ver si el elemento <body>
existe.
// 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)
Esta pantalla de precarga fue hecha por Lapys @ https://github.com/LapysDev
Para construir más sobre la parte Ajax que puede o no puede usar (de los comentarios)
una forma sencilla de cargar otra página y reemplazarla con la actual es:
<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>
Puedes esperar hasta que el cuerpo esté listo:
function onReady(callback) {
var intervalId = window.setInterval(function() {
if (document.getElementsByTagName(''body'')[0] !== undefined) {
window.clearInterval(intervalId);
callback.call(this);
}
}, 1000);
}
function setVisible(selector, visible) {
document.querySelector(selector).style.display = visible ? ''block'' : ''none'';
}
onReady(function() {
setVisible(''.page'', true);
setVisible(''#loading'', false);
});
body {
background: #FFF url("https://i.imgur.com/KheAuef.png") top left repeat-x;
font-family: ''Alex Brush'', cursive !important;
}
.page { display: none; padding: 0 0.5em; }
.page h1 { font-size: 2em; line-height: 1em; margin-top: 1.1em; font-weight: bold; }
.page p { font-size: 1.5em; line-height: 1.275em; margin-top: 0.15em; }
#loading {
display: block;
position: absolute;
top: 0;
left: 0;
z-index: 100;
width: 100vw;
height: 100vh;
background-color: rgba(192, 192, 192, 0.5);
background-image: url("https://i.stack.imgur.com/MnyxU.gif");
background-repeat: no-repeat;
background-position: center;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css?family=Alex+Brush" rel="stylesheet">
<div class="page">
<h1>The standard Lorem Ipsum passage</h1>
<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.</p>
</div>
<div id="loading"></div>
Aquí hay un JSFiddle que demuestra esta técnica.
Si en su sitio tiene llamadas ajax cargando algunos datos, y esta es la razón por la que la página se carga lentamente, la mejor solución que encontré es con
$(document).ajaxStop(function(){
alert("All AJAX requests completed");
});
https://jsfiddle.net/44t5a8zm/ - aquí puede agregar algunas llamadas ajax y probarlas.
Sugeriría agregar clases no-js
a su html para anidar sus selectores de CSS debajo de este como:
.loading {
display: none;
}
.no-js .loading {
display: block;
//....
}
y cuando termine de cargar su código de crédito elimínelo:
$(''html'').removeClass(''no-js'');
Esto ocultará tu spinner de carga ya que no no-js
clase no-js
en html, significa que ya cargaste tu código de crédito