У меня есть базовая страница с верхней панелью навигации и оболочкой.
Всякий раз, когда пользователь нажимает на ссылку навигации, он использует .load
для загрузки содержимого страницы в обертку div.
$(this).ajaxStart(function(){$('.progressbar .bar').css('width','5%');$('.progressbar').fadeIn();});
$(this).ajaxEnd(function(){$('progressbar').hide();});
$('.ajaxspl').on('click',function(e){
e.preventDefault();
var url=$(this).data('url'),
wrap=$('body #wrap');
//clean the wrapper
wrap.slideUp().html('');
//load page into wrapper
wrap.load(url,function(){wrap.slideDown();});
});
Пример возвращаемого значения из .load
:
<div>
...content
</div>
<script>$('.progressbar .bar').css('width','30%');</script>
<link href="/assets/css/datepicker.css" rel="stylesheet" />
<script>$('.progressbar .bar').css('width','60%');</script>
<link href="/assets/css/main.css" rel="stylesheet" />
<script>$('.progressbar .bar').css('width','90%');</script>
<script>//blah blah</script>
Как вы можете видеть, у меня есть индикатор выполнения Bootstrap, который я показываю на ajaxstart()
, а на странице, которую я вызываю, изменяю это значение строки выполнения после загрузки каждого элемента.
Это хорошо работает в Firefox, и я вижу индикатор выполнения, ожидая загрузки страницы, но он не работает в Chrome или IE.
Есть ли лучший способ сделать это? Правильно ли я делаю это или есть другой способ сделать это?
Например, получение $.ajax
размера страницы в kb и обновление панели выполнения "на лету" при получении данных?
Я пытаюсь создать что-то похожее на страницу загрузки при загрузке Gmail.