2012-03-19 4 views
0

я обычно делаюКак узнать, сколько времени /% осталось для document.ready?

$('#load').show(); 
$(document).ready(function(){ 
    $('#load').hide(); 
}); 

где <div id="load"> имеет только анимированного GIF

, но я имел в виду улучшить немного и показать ProgressBar

имеющий

<div id="load"><div id="done"></div></div> 

так я может, в период ожидания (я думаю)

var percent_done = how_do_i_figure_out(); /* here is where i need help */ 
$('#done').width(percent_done); 
+0

Невозможно узнать, какая часть DOM была сгенерирована. –

+0

mi сначала предположим, что у вас есть анимация ({width: '100%'}, average_load_time), но это просто ... –

+0

@KevinB так это то, что делает gmail? (мой последний номер) –

ответ

5

Этого нельзя сделать!

У вас нет доступа к элементам, которые пока не отображаются, так как бы вы знали, чего не хватает ?!

+0

Но как насчет того, знаю ли я, сколько всего kb? –

+0

@ToniMichelCaubet браузер не делает эту информацию доступной. – Pointy

+0

Но давайте скажем его известное значение, var page_weight = 600/* kB * /.есть ли способ узнать, сколько kB было загружено? если это так, это может быть percent_left = downladed()/page_weight * 100 (или что-то еще) –

0

Слишком много переменных, чтобы определить, сколько времени потребуется для загрузки. Некоторые из них не могут быть рассчитаны (например, скорость интернет-соединения).

1

Я бы просто использовал поддельный прогрессбар. Вот пример.

http://jsfiddle.net/dM8Qp/1/

Это невозможно знать, как долго это будет прежде, чем произойдет DOMready событие.

HTML

<div id="pb"></div>​ 

JS

$("#pb").progressbar(); 
var preloader = $("<div />").css("height", "0px").animate({ 
    height: 95 
}, { 
    step: function() { 
     //console.log(Math.ceil(parseFloat($(this).css("height")))) 
     $("#pb").progressbar("value", Math.ceil(parseFloat($(this).css("height")))); 
    }, 
    duration: 2000 
}); 

$(document).ready(function(){ 
    preloader.promise().done(function(){ 
     $("#pb").add(preloader).remove(); 
    }); 
}); 

Обновлено в предложении gdoron в комментариях.

+0

Я бы заполнил прогресс-бар до 95%, а затем, когда DOM готов изменить его на 100%, тогда скройте его. Во всяком случае, подделка индикатора прогресса - это не лучшая практика, _Please Wait_ звучит как лучшее решение. – gdoron

+0

@gdoron Согласен, хотя иногда вам просто нужно угодить вашему клиенту. Вот сайт филаментной группы, который реализует такую ​​же функциональность (нет индикатора прогресса): http://www.filamentgroup.com/ –

+0

Я использовал вашу идею, но просто с простой анимацией (шириной) funcook.com это не так уж плохо, да ? благодаря! –

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