English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Implementazione dell'animazione di caricamento della pagina iniziale con JavaScript nativo

Il programma di animazione di caricamento della progressione JavaScript è una mia opera personale, scritta male, ma può essere consultata, ma senza la mia autorizzazione, non dovrebbe essere utilizzato per altri scopi! 

Ho scritto un'animazione di caricamento della pagina principale la mattina, volevo usarla nel mio blog, ma il test ha scoperto che il blog园 carica troppo velocemente, non si può vedere l'effetto dell'animazione, carica direttamente 'Completo',算了, meglio non rendere il blog troppo ingombrante! 

Quindi ho scritto una pagina di demo, aggiungendo un iframe nel body per caricare un sito più grande, così posso vedere l'effetto! 

Apertura di Safari sembra che il tempo di riproduzione dell'animazione CSS sia sincronizzato, non so la ragione, il test locale non ha problemi (per favore, indicami il mio errore!), Chrome e Firefox non hanno problemi, mentre IE non l'ho testato 

Ho utilizzato l'attributo performance dell'oggetto Window per calcolare il tempo di caricamento, è un metodo specifico per calcolare il tempo esatto, ecco l'articolo MDN su}}proprietà performancela descrizione 

La realizzazione di questo esempio è abbastanza semplice, ma non mostra veramente il progresso di caricamento in base alla dimensione del file, ma cambia la visualizzazione del progresso in base allo stato di document.readyState all'evento document.onreadystatechange. In realtà c'è anche un metodo più affidabile, utilizzare l'evento progress dell'istanza XMLHttpRequest, come:

 var request = new XMLHttpRequest();
 request.onprogress = function (e) {
 if(e.lengthComputable){ //lengthComputable indica se il file ha una dimensione, valore true o false
 progress.innerHTML = Math.round(100 * e.loaded / e.total) + '%'; //loaded, total indicano la dimensione già caricata e la dimensione totale
 }
 } 

Realizzare tutto questo è piuttosto complicato, e non può nemmeno implementare un progresso di caricamento reale al 100%, quindi preferisco essere un po' ingannevole e non usarlo! 

Questa esempio utilizza anche il metodo document.styleSheets[0].insertRule(), ecco la mia sintesi: Sommario dei metodi per leggere e scrivere stili CSS con JavaScript nativo 

Riguardo all'esecuzione degli animazioni CSS, guardate il codice voi stessi, è un codice molto semplice, se vi sembra difficile, consiglio di fare un corso di base CSS, vi presento un contenuto utile:Sito web della guida CSS in cinese,la mia capacità di espressione è limitata, quindi non lo dilungo qui 

Di seguito è l'intero codice + dimostrazione:

<!DOCTYPE html>
<html lang="it">
<head>
 <meta charset="UTF-8">
 <title>Opere di Su Fu</title>
 <script>
 document.onreadystatechange = function () {
 function $id(id){return document.getElementById(id)}
 var width = 0,id;
 preloader_line = $id('preloader_line').firstElementChild,
 preloader = $id('preloader'),
 preloader_center = $id('preloader_center'),
 preloader_btn = $id('preloader_btn'),
 preloader_loading = $id('preloader_loading');
 if (document.readyState == "interactive") {
 loading(1,110,50);
 }
 if (document.readyState == "complete") {
 loading(5,120,16.7);
 preloader_loading.id = 'preloader_loaded';
 preloader_loading.innerHTML = 'Caricamento completato'+'<br/>'+'Utilizzando: '+performance.now().toFixed(3)+' ms';
 preloader_btn.innerHTML = 'E N T E R';
 preloader_btn.style.borderBottom = '4px solid green';
 preloader_btn.style.fontStyle = 'inherit';
 preloader_btn.style.fontSize = '24px';
 if(document.styleSheets[0].insertRule){
 document.styleSheets[0].insertRule('#preloader_btn:hover{border-bottom: 4px solid green;border-radius: 60px;color: red;}',0);
 }else{//Compatibile con IE9 e inferiori
 document.styleSheets[0].addRule('#preloader_btn:hover{border-bottom: 4px solid green;border-radius: 60px;color: red;}',0);
 }
 preloader_btn.onclick = function () {}}
 var opacity = 1,id;
 function hide(){
 if(opacity<=0){
 clearTimeout(id);
 preloader.style.display = 'none';
 document.body.style.overflow = 'auto';
 return;
 }
 opacity -= 0.1;
 preloader.style.opacity = opacity;
 id = setTimeout(function(){
 hide();
 },50);
 }
 hide();
 };
 }
 function loading(step,max,time){
 if(width>=max){
 clearTimeout(id);
 if(max >= 120){
 preloader_line.parentNode.style.display = 'none';
 }
 return;
 }
 width += step;
 preloader_line.style.width = width+'px';
 id = setTimeout(function(){
 loading(step,max,time);
 },time);
 }
 };
 </script>
 <style>
 body{
 overflow: hidden;
 }
 #preloader{
 position: absolute;
 width: 100%;
 height: 100%;
 background-color: white;
 z-index: 999;
 }
 #preloader_center{
 position: absolute;
 left: 0;
 right: 0;
 top: 0;
 bottom: 0;
 width: 150px;
 height: 75px;
 margin: auto;
 }
 #preloader_loading{
 position: absolute;
 left: 0;
 right: 0;
 top: 45px;
 margin: auto;
 width: 96px;
 height: 30px;
 }
 #preloader_loaded{
 position: absolute;
 left: 0;
 right: 0;
 top: 45px;
 margin: auto;
 font-size: 12px;
 text-align: center;
 line-height: 30px;
 }
 #preloader_loading span{
 position: absolute;
 width: 10px;
 height: 2px;
 top: 0;
 bottom: 0;
 margin: auto;
 background-color: #9b59b6;
 animation: loading 1.5s infinite ease-in-out ;
 }
 #preloader_loading span:nth-child(2){
 sinistra: 12px;
 animation-delay: 0,1s;
 }
 #preloader_loading span:nth-child(3){
 sinistra: 24px;
 animation-delay: 0,2s;
 }
 #preloader_loading span:nth-child(4){
 sinistra: 36px;
 animation-delay: 0,3s;
 }
 #preloader_loading span:nth-child(5){
 sinistra: 48px;
 animation-delay: 0,4s;
 }
 #preloader_loading span:nth-child(6){
 sinistra: 50px;
 animation-delay: 0,5s;
 }
 #preloader_loading span:nth-child(7){
 sinistra: 62px;
 animation-delay: 0,6s;
 }
 #preloader_loading span:nth-child(8){
 sinistra: 74px;
 animation-delay: 0,7s;
 }
 #preloader_loading span:nth-child(9){
 sinistra: 86px;
 animation-delay: 0,8s;
 }
 @keyframes loading {
 0%{altezza: 2px; sfondo: #9b59b6;}
 15%{altezza: 20px; sfondo: #3498db;}
 50%{altezza: 2px; sfondo: #9b59b6;}
 100%{altezza: 2px; sfondo: #9b59b6;}
 }
 iframe{larghezza: 100%; altezza: 1000px;}
 #preloader_btn{
 position: absolute;
 left: 0;
 right: 0;
 top: 0;
 margin: auto;
 display: block;
 width: 122px;
 height: 40px;
 font-size: 14px;
 text-align: center;
 line-height: 40px;
 cursor: pointer;
 color: #9b59b6;
 font-style: italic;
 -webkit-transition: tutto 0,5s;
 -moz-transition: tutto 0,5s;
 -ms-transition: all .5s;
 -o-transition: all .5s;
 transition: all .5s;
 }
 #preloader_line{
 position: absolute;
 left: 0;
 right: 0;
 top: 40px;
 margin: auto;
 width: 120px;
 height: 2px;
 border: 1px solid green;
 }
 #preloader_line span{
 display: block;
 height: 2px;
 width: 0;
 background-color: green;
 }
 </style>
</head>
<body>
<div id="preloader">
 <div id="preloader_center">
 <span id="preloader_btn">Caricamento...</span>
 <span id="preloader_line">
 <span></span>
 </span>
 <div id="preloader_loading">
 <span></span>
 <span></span>
 <span></span>
 <span></span>
 <span></span>
 <span></span>
 <span></span>
 <span></span>
 <span></span>
 </div>
 </div>
</div>
<iframe src="http://jd.com"></iframe>
</body>
</html>

Questo è tutto il contenuto dell'articolo, speriamo che sia utile per la tua apprendimento, e speriamo che tu sostenga fortemente la guida a urla.

Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il copyright è dell'autore originale, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non possiede il diritto di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, questo sito cancellerà immediatamente il contenuto sospetto di violazione del copyright.

Ti potrebbe interessare