2012-06-17 2 views
29

Я бы хотел отобразить загрузочную панель до загрузки всей страницы. На данный момент я просто использую небольшую задержку:Показывать загрузочную панель до того, как будет загружена вся страница.

$(document).ready(function(){ 
    $('#page').fadeIn(2000); 
}); 

На этой странице уже используется jQuery.

Примечание: Я попытался это, но он не работает для меня:

loading bar while script runs

Я также пробовал другие решения. В большинстве случаев страница загружается как обычно, или страница вообще не загружается/отображается.

Благодарим за помощь.

ответ

57

Используйте DIV #overlay с вашей загрузки информации/.gif, который будет охватывать все страницы:

<div id="overlay"> 
    <img src="loading.gif" alt="Loading" /> 
    Loading... 
</div> 

JQuery:

$(window).load(function(){ 
    // PAGE IS FULLY LOADED 
    // FADE OUT YOUR OVERLAYING DIV 
    $('#overlay').fadeOut(); 
}); 

Вот пример с Загрузка бар :

jsBin demo

<div id="overlay"> 
    <div id="progstat"></div> 
    <div id="progress"></div> 
    </div> 

    <div id="container"> 
    <img src="http://placehold.it/3000x3000/cf5"> 
    </div> 

CSS:

*{margin:0;} 
body{ font: 200 16px/1 sans-serif; } 
img{ width:32.2%; } 

#overlay{ 
    position:fixed; 
    z-index:99999; 
    top:0; 
    left:0; 
    bottom:0; 
    right:0; 
    background:rgba(0,0,0,0.9); 
    transition: 1s 0.4s; 
} 
#progress{ 
    height:1px; 
    background:#fff; 
    position:absolute; 
    width:0;    /* will be increased by JS */ 
    top:50%; 
} 
#progstat{ 
    font-size:0.7em; 
    letter-spacing: 3px; 
    position:absolute; 
    top:50%; 
    margin-top:-40px; 
    width:100%; 
    text-align:center; 
    color:#fff; 
} 

JavaScript:

;(function(){ 
    function id(v){ return document.getElementById(v); } 
    function loadbar() { 
    var ovrl = id("overlay"), 
     prog = id("progress"), 
     stat = id("progstat"), 
     img = document.images, 
     c = 0, 
     tot = img.length; 
    if(tot == 0) return doneLoading(); 

    function imgLoaded(){ 
     c += 1; 
     var perc = ((100/tot*c) << 0) +"%"; 
     prog.style.width = perc; 
     stat.innerHTML = "Loading "+ perc; 
     if(c===tot) return doneLoading(); 
    } 
    function doneLoading(){ 
     ovrl.style.opacity = 0; 
     setTimeout(function(){ 
     ovrl.style.display = "none"; 
     }, 1200); 
    } 
    for(var i=0; i<tot; i++) { 
     var tImg  = new Image(); 
     tImg.onload = imgLoaded; 
     tImg.onerror = imgLoaded; 
     tImg.src  = img[i].src; 
    }  
    } 
    document.addEventListener('DOMContentLoaded', loadbar, false); 
}()); 
+1

Nice! Работает без каких-либо «побочных эффектов». Большое спасибо! –

+1

Вы уверены, что нет «побочных эффектов»? Я помню, что .load() не ожидал некоторых элементов, таких как полная загрузка всех изображений на странице. ** Редактировать: ** Я не помню хорошо, он не должен иметь никакого побочного эффекта, [здесь объяснение почему] (http://ablogaboutcode.com/2011/06/14/how-javascript-loading- works-domcontentloaded-and-onload /) –

+0

Я понимаю, что этот ответ немного стар, но мне было интересно, если бы было решение, которое ухудшилось бы красиво, если у пользователя отключен javascript? Потому что в настоящее время они просто заканчивают загрузку gif для веб-сайта. – arandompenguin

11

HTML

JAVASCRIPT

$(function() { 
    $(".preload").fadeOut(2000, function() { 
     $(".content").fadeIn(1000);   
    }); 
});​ 

CSS

.content {display:none;} 
.preload { 
    width:100px; 
    height: 100px; 
    position: fixed; 
    top: 50%; 
    left: 50%; 
} 
​ 

DEMO

Смежные вопросы