To Create Animated Progress Bar It Takes Only Two Steps:-
- Make a HTML file and define markup and scripting
- Make a CSS file and define styling
Step 1. Make a HTML file and define markup and scripting
We make a HTML file and save it with a name progress_bar.html
<html> <head> <link href="progress_bar_style.css" type="text/css" rel="stylesheet"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> function animate_progressbar() { $total_width=$("#progressbar_wrapper").width(); $width_inc=$total_width/10; if($("#progressbar").width()<$total_width) { $width=$("#progressbar").width()+$width_inc; $("#progressbar").animate({width:''+$width+''},300); } } function reset_progressbar() { $("#progressbar").animate({width:'0px'},300); } </script> </head> <body> <div id="wrapper"> <div id="progressbar_div"> <div id="progressbar_wrapper"> <div id="progressbar"></div> </div> <p> <input type="button" value="ANIMATE" onclick="animate_progressbar();"> <input type="button" value="RESET" onclick="reset_progressbar();"> </p> </div> </div> </body> </html>
In this step we create two div one for progress bar wrapper and another is for progress
bar.We create two button to animate the progress of progress bar and reset the progress bar.You may also like multistep form with progress bar using jQuery.
To animate progress bar we create animate_progressbar() function in this we get progress bar wrapper width and
divide by 10 you can use any number then we check the progress bar width is smaller then its wrapper if yes we
increase the progress bar width using animate function of jQuery(). To reset the progress bar we simply set progress
bar width to 0 by calling reset_progressbar() function.You may also like display progress bar while page load.
Step 2. Make a CSS file and define styling
We make a CSS file and save it with a name progress_bar_style.css
body { margin:0 auto; padding:0px; text-align:center; width:100%; font-family: "Myriad Pro","Helvetica Neue",Helvetica,Arial,Sans-Serif; background-color:#A9F5A9; } #wrapper { margin:0 auto; padding:0px; text-align:center; width:995px; } #progressbar_wrapper { border:1px solid #088A08; margin-left:345px; margin-top:20px; width:300px; height:35px; border-radius:3px; overflow:hidden; } #progressbar { width:0px; height:35px; border-radius:0px; background-color:green; } #progressbar_div input { background-color:#088A08; border:none; width:150px; height:40px; color:white; border-radius:3px; border-bottom:3px solid #0B610B; }
That’s all, this is how to create animated progress bar using jQuery and CSS.You can
customize this code further as per your requirement. And please feel free to give comments on this tutorial.
Ожирение сайтов
По статистике HTTP Archive, в июне 2018 года средний размер веб-страницы в интернете составил1720 КБ. За восемь лет он вырос в 3,7 раза. Есть несколько причин такого «ожирения» страниц, в том числе увеличение размера графических изображений (с 226 до 890 КБ, в 3,8 раза). Но в относительных цифрах за восьмилетний период сильнее всего выросла доля JavaScript, то есть внешних файлов .js, которые загружаются вместе со страницей HTML. Их объем увеличился с 89 до 371 КБ, то есть в 4,18 раза!
К сожалению, именно скрипты становятся главной причиной подтормаживаний. Пользователю приходится несколько секунд ждать загрузки страницы, а потом она некоторое время не реагирует на ввод с тачскрина, движения мышью или нажатия с клавиатуры. Когда начинает реагировать, то перегруженная скриптами страница может двигаться по экрану рывками при прокрутке и продолжит подтормаживать, при этом максимально загружая процессор.
В чем причина?
Дело в том, что загрузка скриптов влияет на самую главную метрику производительности: время до появления интерактивности (Time to Interactive). Например, изображения на странице практически не влияют на эту метрику, потому что они не блокируют загрузку элементов интерфейса, а вот скрипты выполняются в основном потоке, то есть находятся на критичном пути рендеринга. Поэтому ни в коем случае нельзя безгранично раздувать количество скриптов на странице. Если пользователь с настольного компьютера или ноутбука еще кое-как загрузит страницу, то пользователь на смартфоне может ее не дождаться. Через десять секунд ожидания он просто закроет страницу.
Это же самый быстрый способ загружать скрипты, правда? ПРАВДА?
Ну, если вы динамически решаете, какие скрипты загружать, тогда да, в противном
случае, пожалуй, нет. С примером выше браузер должен распарсить и выполнить
скрипт для того, чтобы определить, какие скрипты скачивать. Это значит, что
ваши скрипты остаются скрытыми от сканеров предзагрузки. Браузеры используют
эти сканеры для того, чтобы найти на странице те ресурсы, которые браузеру,
скорее всего, скоро понадобятся. Или, найти ресурсы страницы, пока браузер
блокирован загрузкой другого ресурса.
Можно добавить видимость этих скриптов для браузера, поставив в заголовке
документа:
Эти директивы говорят браузеру, что странице нужны 1.js и 2.js, и они видны
модулю предзагрузки. очень похож на
, но у него немного другая семантика. К сожалению,
сейчас он поддерживается только в Chrome, и вам нужно дважды декларировать,
какие скрипты загружать: один раз в ссылках, один раз в вашем скрипте.
Использование методов виджета Progress Bar
Для виджета Progress Bar определен ряд методов, для которых используется та же форма вызова, что и для методов виджета Button. Иными словами, вы вызываете метод progressbar() и в качестве первого аргумента указываете требуемый метод. Доступные методы представлены в таблице ниже:
Метод | Описание |
---|---|
progressbar(«destroy») | Возвращает элемент div в исходное состояние, полностью удаляя из него функциональность виджета |
progressbar(«disable») | Отключает индикатор процесса |
progressbar(«enable») | Включает индикатор процесса |
progressbar(«option») | Устанавливает одно или несколько значений свойств |
progressbar(«value», value) | Получает или устанавливает значение, отображаемое индикатором процесса |
Большинство этих методов работает аналогично одноименным методам виджета Button, поэтому я не буду терять время на пояснение их примерами. Исключение составляет метод value, который позволяет получать или устанавливать значение, отображаемое индикатором процесса. Соответствующий пример приведен ниже:
В этом примере добавлена пара элементов button, которые используются для уменьшения или увеличения значения, отображаемого индикатором процесса. Каждое нажатие кнопки увеличивает значение на 10%. Результат представлен на рисунке:
Метод value всегда возвращает значение, лежащее в интервале от 0 до 100, даже если вы установите значение, выходящее за эти пределы в ту или иную сторону. Это означает, что проверку указываемых вами значений можно возложить на индикатор, а не заниматься этим самому.
Оптимизация JavaScript на странице
Бюджет
При добавлении скриптов на страницу нужно помнить, что у каждой страницы есть бюджет по времени и по объему скриптов. Для нормальной загрузки страницы на мобильных устройствах специалисты рекомендуют удерживать бюджет страницы в пределах 200 килобайт сжатых скриптов. Это разархивируется более чем в 1 мегабайт кода, который браузеру нужно разобрать и выполнить.
Порядок исполнения
Браузер отображает страницу сверху вниз, создавая DOM-элементы по мере продвижения по HTML-документу. Если мы помещаем теги <script> в конце, то файлы JavaScript будут открыты одними из последних и не слишком повлияют на критичный путь рендеринга. И наоборот, если разместить тег <script> в начале страницы, то по стандарту браузер обязан сначала выполнить этот скрипт, а уже потом показать оставшуюся часть страницы. Это одна из главных причин подтормаживаний при загрузке страниц.
Поэтому есть смысл переносить в конец страницы ссылки на некритичные скрипты, такие как счетчики, скрипты аналитики и реклама.
Асинхронная загрузка
Более грамотный способ решить проблему с загрузкой «медленных» внешних скриптов — асинхронная загрузка с помощью атрибута async. Если с тегом <script> указан такой атрибут, то браузер не будет ждать загрузки и выполнения этого скрипта, прежде чем показать оставшуюся часть страницы.
Кроме async, существует атрибут defer. Он тоже обеспечивает асинхронную загрузку, но при этом гарантирует, что скрипты будут выполняться в том порядке, в каком указаны на странице, а также ждет обработки всего HTML в браузере
Это важно, если скрипты зависят друг от друга и от контента HTML-страницы.
Короче! Скажите уже, как мне загружать скрипты!
Ладно, ладно. Итак, вы хотите загружать скрипты так, чтобы они не
блокировали рендеринг, не заставляли бы вас писать повторяющийся код, и иметь
отличную кроссбраузерную поддержку? Вот что я могу предложить:
Да, именно так. И в конце элемента . Понимаете, бытие веб-разработчика
чем-то похоже на бытие Сизифа (бум! +100 очков к хипстерству за ссылку на
древнегреческую мифологию). Ограничения в HTML и браузерах не дают нам сделать
что-то, что будет значительно лучше.
Я очень надеюсь, что JavaScript-модули спасут нас, предоставив
декларативный и неблокирующий способ загружать скрипты с сохранением контроля
над порядком их исполнения, хотя, для этого придется писать скрипты как модули.
JavaScript
$(document).ready(function(){ jQuery.fn.anim_progressbar = function (aOptions) { // Определяем значения var iCms = 1000; var iMms = 60 * iCms; var iHms = 3600 * iCms; var iDms = 24 * 3600 * iCms; // Определяем опции var aDefOpts = { start: new Date(), // Текущее время finish: new Date().setTime(new Date().getTime() + 60 * iCms), // Текущее время + 60 сек interval: 100 } var aOpts = jQuery.extend(aDefOpts, aOptions); var vPb = this; // Каждый индикатор прогресса return this.each( function() { var iDuration = aOpts.finish - aOpts.start; // Вызываем оригинальный индикатор прогресса $(vPb).children('.pbar').progressbar(); // Процесс обработки var vInterval = setInterval( function(){ var iLeftMs = aOpts.finish - new Date(); // Оставшееся время в миллисекундах var iElapsedMs = new Date() - aOpts.start, // Прошедшее время в миллисекундах iDays = parseInt(iLeftMs / iDms), // Прошло дней iHours = parseInt((iLeftMs - (iDays * iDms)) / iHms), // Прошло часов iMin = parseInt((iLeftMs - (iDays * iDms) - (iHours * iHms)) / iMms), // Прошло минут iSec = parseInt((iLeftMs - (iDays * iDms) - (iMin * iMms) - (iHours * iHms)) / iCms), // Прошло секунд iPerc = (iElapsedMs > 0) ? iElapsedMs / iDuration * 100 : 0; // Процент выполнения // Выводим текущее положение и прогресс $(vPb).children('.percent').html('<b>'+iPerc.toFixed(1)+'%</b>'); $(vPb).children('.elapsed').html(iDays+' дн. '+iHours+'ч.:'+iMin+'мин.:'+iSec+'сек.</b>'); $(vPb).children('.pbar').children('.ui-progressbar-value').css('width', iPerc+'%'); // В случае завершения if (iPerc >= 100) { clearInterval(vInterval); $(vPb).children('.percent').html('<b>100%</b>'); $(vPb).children('.elapsed').html('Завершено'); } } ,aOpts.interval ); } ); } // Режим по умолчанию $('#progress1').anim_progressbar(); // Для секунд с 5-й по 15-ю var iNow = new Date().setTime(new Date().getTime() + 5 * 1000); // Теперь прибавляем по 5 секунд var iEnd = new Date().setTime(new Date().getTime() + 15 * 1000); // Теперь прибавляем по 15 секунд $('#progress2').anim_progressbar({start: iNow, finish: iEnd, interval: 100}); // Устанавливаем интервал обновления в 1 секунду $('#progress3').anim_progressbar({interval: 1000}); });
В первой части кода мы создаем новый плагин jQuery anim_progressbar, а во второй — приводим несколько примеров инициализации с различными параметрами. Конструктору передаются следующие параметры: start (время старта), finish (время финиша) и interval (интервал обновления индикатора). Так что вы можете устанавливать не только часы и минуты, но и дни.
DOM спешит на помощь
На самом деле, ответ находится внутри спецификации HTML5, хотя он и спрятан в
самом низу секции, посвященной загрузке скриптов.
Вот он:
А теперь, давайте переведем это на человеческий язык:
Скрипты, которые создаются и добавляются к документу динамически, асинхронны
по умолчанию, не блокируют рендеринг и выполняются, как только загружены.
Но, это так же означает, что они могут выполниться в неправильном порядке. Однако, мы можем явно указать на них, как на не-асинхронные:
Это дает нашим скриптам поведение, которого нельзя добиться только
манипуляциями с HTML. Скрипты явно не-асинхронные, они добавляются в очередь
выполнения (та самая очередь, в которую они добавляются в нашем самом первом
примере, где был только HTML). Однако из-за того, что они создаются
динамически, они выполняются независимо от парсинга документа, так что
рендеринг не блокируется, пока они загружаются (не путайте не-асинхронную
загрузку скриптов с синхронным XHR, в котором нет ничего хорошего).
Приведенный скрипт нужно включать прямо в заголовке страницы, чтобы загрузка
скриптов начиналась как можно быстрее, не мешая прогрессивному рендерингу, и
выполнялась том порядке, который мы установили. 2.js легко может скачаться
перед 1.js, но он не будет запущен, пока 1.js не скачается и не выполнится
(или пока не произойдет ошибка на том или ином этапе). Ура! Асинхронная
загрузка и исполнение по порядку!
Загружать скрипты таким образом можно , за исключением Safari 5.0 (в 5.1 все окей). Кроме того,
этот метод поддерживают все версии Firefox и Opera, поскольку те версии,
которые не поддерживают атрибут , все равно исполняют динамически
добавленные скрипты в том порядке, в котором они добавлены в документ.
Вот спасибо, IE! (и теперь это сарказм)
Бог дал, Бог взял. К сожалению, в семействе IE с версии 4 по 9 присутствует
очень противный баг, который может заставить скрипты выполняться в самом
неожиданном порядке.
Вот что происходит:
2.js
Если на странице присутствует хотя бы один абзац, то мы можем ожидать, что
порядок записей в лог будет идти так — , а в IE9 и ниже получается
так — . Некоторые манипуляции с DOM заставляют IE приостановить
выполнение текущего скрипта и исполнить другие, ожидающие выполнения скрипты,
перед тем, как продолжить.
Даже в реализациях без этого бага (IE10 и других браузерах) выполнение скрипта
будет отложено до того момента, как браузер скачает и распарсит весь документ.
Не так уж плохо, если вы в любом случае собираетесь ждать выполнения . Но если вы хотите действительно агрессивно подойти к
оптимизации производительности, то подготовку кода к обработке событий можно
начать пораньше.
Библиотеки для асинхронной загрузки JavaScript
RequireJS — модуль загрузки JavaScript. Оптимизирован под браузеры, но он может использоваться в других средах, таких как Node, Rhino.
require(, function(script) { console.log("start after load script.js"); });
extsrc.js — библиотека, которая запускает скрипты на выполнение после того, как страница загрузится и отобразится пользователю. Работает корректно с document.write.
<script src="https://extsrcjs.googlecode.com/svn/trunk/extsrc.js"></script> <script extsrc="...."></script> <script asyncsrc="...."></script>
yepnope.js — позволяет совершать асинхронную загрузку JavaScript и CSS файлов.
yepnope();
Анимация индикатора процесса
Несмотря на то что внешний вид индикатора процесса согласуется с используемой темой оформления jQuery UI, он выглядит совсем просто. При создании этого индикатора jQuery UI добавляет в документ элемент div, а также определяет ряд новых классов как в новом элементе div, так и в том, для которого вызывался метод progressbar(). Сгенерированная HTML-разметка выглядит примерно следующим образом:
<div id="progressDiv" class="ui-progressbar ui-widget ui-widget-content ui-corner-all" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="21"> <div class="ui-progressbar-value ui-widget-header ui-corner-left" style="width: 21%;"></div> </div>
Класс ui-progressbar-value воздействует на элемент, который jQuery UI добавляет для отображения значения индикатора, а класс ui-progressbar — на внешний элемент div, от которого мы отталкивались. Эти классы можно привлечь для создания индикатора процесса, в котором используется анимированное GIF-изображение, как показано в примере ниже:
Для указания изображения, которое будет использоваться внутренним элементом div, можно воспользоваться CSS-свойством background-image. В данном случае указано изображение progress-animation.gif, которое представляет собой простое анимированное GIF-изображение, взятое на сайте jQuery UI:
По поводу использования изображений, подобных этому, можно сделать два замечания. Во-первых, ответственность за то, чтобы выбранное изображение согласовывалось с остальной частью темы, лежит на вас.
Во-вторых, необходимо следить за высотой изображения. По умолчанию высота индикатора процесса jQuery UI составляет 2em, что может породить проблемы в случае меньших изображений. Чтобы эти трудности не возникали, установите для свойства height элементов класса ui-progressbar значение, совпадающее с высотой изображения, которое используется. В данном примере высота изображения составляет 22 пикселя. Если не предпринять никаких мер по регулированию высоты, то границы шкалы индикатора либо окажутся спрятанными за изображением, либо будут выступать за его пределы, как показано на рисунке:
Progress Events
Progress events supports following attributes:
- lengthComputable — a read-only (Boolean) property indicating if the resource concerned by the ProgressEvent has a length that can be calculated
- total — a read-only (Unsigned Long) property representing the total amount of work that the underlying process is in the progress of performing
- loaded — a read-only (Unsigned Long) property representing the amount of work already performed by the underlying process
The following event handlers are supported for XMLHttpRequest
and XMLHttpRequestUpload objects:
- onloadstart — the request starts
- onprogress — transmitting data
- onabort — request has been aborted
- onerror — the request has failed
- onload — the request has successfully completed
- ontimeout — the timeout has passed before the request completed
- onloadend — the request has completed
Я знаю, что спасет нас! JavaScript-библиотека!
Идеальная ситуация выглядела бы так: у нас есть набор скриптов, которые
загружаются немедленно, не блокируя рендеринг, и выполняются как только
возможно, в том порядке, в котором они были добавлены. Очень жаль, что HTML
ненавидит вас и не даст вам такое провернуть.
Эту проблему пытались несколько раз решить на уровне JavaScript. Одни решения
предлагали вам внести изменения в ваш JavaScript-код, обернув его в колбэк,
который библиотека вызовет в правильном порядке (например, RequireJS).
Другие используют XHR для параллельной загрузки, а потом исполняют через
в правильном порядке. Но этот метод не работает для скриптов
находящихся на других доменах, если у них нет CORS-заголовка (а у
браузера нет соответствующей поддержки).
Некоторые, как покойный LabJS, вообще использовали супер-магические хаки.
Общий принцип этих хаков выглядел так: заставить браузер скачать ресурс так,
что по окончанию загрузки будет вызвано событие, но, при этом, не исполнять
ресурс.
В LabJS скрипт добавлялся с неправильным MIME-типом, например:
. После того, как все скрипты
скачались, они добавлялись снова, но, уже с правильным типом, в надежде, что
браузер загрузит их из кэша и исполнит сразу и по порядку. Это опиралось на
распространенное, но не соответствующее спецификации поведение.
И все сломалось, когда в HTML5 было объявлено, что браузеры не должны
загружать скрипты с неизвестным типом.
У этих приемов есть парочка вполне четких проблем в сфере производительности.
Например, придется подождать, пока загрузится и исполнится код JavaScript-
библиотеки перед тем, как хоть какой-то из скриптов, который ею управляется,
начнет загружаться. Кроме того, как мы собираемся загружать загрузчик скрипта?
Как мы будем загружать скрипт, который говорит загрузчику скриптов, что ему
загружать? Кто будет хранить «Хранителей»? Почему я голый? Это все очень
сложные вопросы.
Популярные
Хранение паролей в PHP с использованием crypt()
просмотры: 60342
Примеры использования CDbCriteria в Yii
просмотры: 32230
Загрузка JavaScript(без блокировки отрисовки документа, асинхронная загрузка)
просмотры: 17336
Преобразование первых букв в заглавные(верхний регистр) — PHP
просмотры: 15352
Парсинг URL с помощью JavaScript
просмотры: 13899
Tornado. Асинхронное программирование
просмотры: 13245
Composer — менеджер зависимостей для PHP
просмотры: 9935
Установка Django в Ubuntu с использованием локального Python окружения
просмотры: 8624
Смена JAVA_HOME в Ubuntu
просмотры: 8586
MySQL и поддержка Unicode
просмотры: 8169
Использовать асинхронную загрузку Javascript и CSS
Браузер загружает код HTML построчно, но загрузка множества файлов Javascript может тормозить весь процесс. Для некоторых пользователей с медленным интернетом тормозить могут и файлы стилей. Чтобы браузер не останавливался на загрузке этих файлов, а продолжал подгружать остальной код, настраивают асинхронную загрузку Javascript и CSS.
Асинхронная загрузка позволит браузеру продолжать загружать основной код HTML и другие нужные ресурсы независимо от загрузки сторонних элементов.
Настроить асинхронную загрузку Javascript
Если на сайте есть видео со сторонних сервисов или другие внешние элементы, браузеру придется ждать загрузки всех элементов Javascript. Недоступное видео или другие проблемы с контентом могут вообще заблокировать загрузку сайта. Чтобы этого не произошло, используют
Friendly iFrame или асинхронную загрузку.
Создайте пустой div блок в том месте, где нужно отобразить элемент:
<div id="script_block" class="script_block"></div>
Перейдите в конец страницы и вставьте скрипт для асинхронной загрузки перед :
<div id="script_ad" class="script_ad" style="display:none;"> файл или скрипт для загрузки</div> <script type="text/javascript"> *переместить на реальную позицию отображения* document.getElementById('script_block').appendChild(document.getElementById('script_ad')); *показать* document.getElementById('script_ad').style.display = 'block'; </script>
Скрипт работает во всех современных браузерах.
Настроить асинхронную загрузку CSS
Быстрее показать страницу пользователю с медленным интернетом поможет асинхронная загрузка CSS. Рекомендуют применять ее только к вспомогательным CSS, иначе страница появится сначала вообще без стилей, а потом будет перерисовываться.
Настроить асинхронную загрузку CSS можно несколькими способами, к примеру, через «rel=preload»:
<link type="text/css" href="style.css" rel="preload" as="style" onload="this.rel='stylesheet'"> <noscript> <link type="text/css" href="style.css" rel="stylesheet" /> </noscript>
В некоторых версиях браузеров, к примеру, в Firefox 57, «preload» по умолчанию отключен, поэтому событие «onload» не сработает. Учитывайте это и догружайте данные скриптом:
Скрипт
cssrelpreload.js by loadCSS на GitHub включает поддержку rel=preload для файлов CSS файлов. Он сработает, если в браузере нет родной поддержки «preload».
Как добавить JavaScript в HTML
Слева: порядок загрузки элементов заглавной страницы skillbox.ru
Тег <script>
Любые скрипты вставляются в HTML с помощью тега <script>. Между открывающим и закрывающим тегом вставляем или сам код скрипта, или ссылку на внешний файл.
Чтобы встроить JavaScript в HTML, открываем файл HTML в любом текстовом редакторе, добавляем теги <script>…</script>, между ними пишем код программы. Затем сохраняем файл (например, skillbox.htm).
Результат
Внешний файл .js
Во многих случаях лучше загружать скрипт из внешнего файла. Такой вариант используется, если мы загружаем какой-то стандартный файл .js из внешнего источника, например библиотеку jQuery. Или если этот «скрипт» на самом деле представляет большое веб-приложение, которое разрабатывается отдельно. Загрузка из внешнего файла всегда лучше, если наша программа JavaScript нужна нескольким веб-страницам.
Для подключения внешнего файла мы опять используем открывающий и закрывающий теги <script>…</script>, но между ними указываем не код программы, а путь к файлу с расширением .js, где записан этот код программы.
В нашем примере программу alert(«Привет, Skillbox») мы сохраняем в отдельный файл skill.js, а относительный или абсолютный путь к нему прописываем между тегами <script>…</script> с атрибутом src=»».
или
Результат выполнения скрипта, загруженного таким образом, не отличается от выполнения кода, прописанного непосредственно в странице HTML.
На странице можно указать любое количество файлов .js, которые будут скачаны и запущены на выполнение. Теги вставляются в произвольные места страницы или перечисляются друг за другом:
В одном теге <script> нельзя одновременно и подключить внешний скрипт, и указать код. Придется выбрать что-то одно.
Progressbar Plugin Events
In this section, we will discuss about different events associated with jQueryUI progressbar plugin. We have used many of these events the section.
Events | Usage | Description |
---|---|---|
change( event, ui ) | $( “.selector” ).progressbar({,change: function( event, ui ) {}}); | This event is fired when the value is changed and executes the callback function. |
complete( event, ui ) | $( “.selector” ).progressbar({,complete: function( event, ui ) {}}); | This event is fired when the value of the progressbar reaches it’s maximum. |
create( event, ui ) | $( “.selector” ).progressbar({,create: function( event, ui ) {}}); | This event is fired when the progressbar is created. |
The above table briefly describes the events associated with progressbar plugin.
Отображение полезной информации о ходе выполнения задач
Никаких жестких правил относительно того, каким образом виджеты должны использоваться в веб-приложениях, не существует. В то же время в пользовательской среде, мнение которой формируется под влиянием стандартов, устанавливаемых такими операционными системами, как Windows или Mac OS, уже сложились определенные представления о том, каким должно быть поведение тех или иных элементов управления, и в частности индикатора процесса. Чтобы использование индикатора процесса приносило действительную пользу, придерживайтесь следующих правил:
-
Во-первых, изменяйте значение индикатора лишь в сторону увеличения. Не пытайтесь уменьшать его, если оказывается, что для завершения задачи требуется выполнить большее число действий, чем первоначально предполагалось. Индикатор процесса должен отражать степень выполнения задачи, а не оценку времени, оставшегося до ее завершения. Если существует несколько возможных путей развития вычислительного процесса, то значение индикатора должно базироваться на наиболее пессимистическом варианте развития событий. Лучше впоследствии отобразить существенный скачок значения, чем заставлять пользователя теряться в догадках относительно реального состояния дел.
-
Во-вторых, ни в коем случае не допускайте хождения индикатора процесса по кругу. Если у вас имеется недостаточно информации для того, чтобы отобразить разумную оценку степени выполнения задачи, используйте индикатор процесса, предназначенный для недетерминированных задач. Если значение индикатора приближается к отметке 100%, то пользователь настраивается на то, что процесс вот-вот закончится. Если же индикатор внезапно возвращается в начало шкалы, то это просто-напросто сбивает пользователя с толку и делает применение индикатора процесса бессмысленным.
Погружение в CSS
Как только вы закончите работу с HTML-частью, откройте файл ui.css и вставьте в него следующий код CSS.
Там нет ничего необычного, только некоторые основные стили (которые я упростил из исходного источника) для макета.
Наконец, можем заняться более серьезными вещами. Приведенный ниже код оживит ваш progressbar HTML / CSS. Я объясню, как это работает через минуту. А пока скопируйте его и вставьте в свой файл ui.css.
Сохраните файл ui.css и посмотрите на файл progress.html в своем веб-браузере. Если вы тщательно следовали предыдущим шагам этого урока, вы должны увидеть великолепный progressbar, выполненный без использования какого-либо изображения.
Итак, как этот код работает во всех браузерах? Вот объяснение:
Во-первых, у нас есть два класса CSS: .ui-progress-bar и .ui-progress. Первый — это контейнер, а второй — сам элемент прогресса.
- Строки с 1 по 9: Эти строки определяют анимацию, специфичную для веб-набора, которая позволяет нам перемещать элемент из одной точки в другую. Для получения дополнительной информации об анимации HTML и CSS см. http://webkit.org/blog/324/css-animation-2/.
- Строка 16: CSS3-свойство border-radius позволяет вам определять радиус и получать закругленные углы.
- Строка 17: специфическое свойство Mozilla для border-radius.
- Строка 18: специфическое свойство Webkit для border-radius.
- Строка 19: свойство -webkit-gradient позволяет добавлять градиент к элементу. Работает только на Webkit, другие браузеры игнорируют это свойство.
- Строка 20: специфичное для Mozilla свойство, аналогичное -webkit- gradient с другим синтаксисом.
- Строки с 21 по 23: box-shadow (и его специфичные для браузера альтернативы) позволяет добавлять тень к элементу.
- Строка 34: специфическое свойство Webkit, основанное на стандартном свойстве background-size, которое позволяет указать размер фонового изображения.
- Строка 56: запускает анимацию веб-набора, определенную в строке 1.
Разметка HTML
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <link href="css/jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css"/> <link href="css/main.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="js/jquery-1.6.2.min.js"></script> <script type="text/javascript" src="js/jquery-ui-1.8.16.custom.min.js"></script> <script type="text/javascript" src="js/script.js"></script> <title>Анимированный индикатор прогресса на jQuery | Материалы проекта RUSELLER.COM</title> </head> <body> <div class="example"> <div id="progress1"> <div class="percent"></div> <div class="pbar"></div> <div class="elapsed"></div> </div> <hr /> <div id="progress2"> <div class="percent"></div> <div class="pbar"></div> <div class="elapsed"></div> </div> <hr /> <div id="progress3"> <div class="percent"></div> <div class="pbar"></div> <div class="elapsed"></div> </div> </div> </body> </html>
Для демонстрации приготовлено 3 индикатора прогресса. Каждый индикатор имеет свой набор опций.
Обратите внимание на библиотеки jQuery и стили. Как их подготовить? Очень просто
Переходим на страницу jQuery UI, выбираем UI Core и единственный виджет – Progressbar, затем нажимаем Download. В полученном пакете будет содержаться весь необходимый набор (jquery-1.6.2.min.js + jquery-ui-1.8.16.custom.min.js + jquery-ui-1.8.16.custom.css + изображения).
Progressbar Plugin in Action
In this section, we will try different examples to explore the uses of jQueryUI Progressbar plugin.
Default Functionality
The following example demonstrates the default functionality of a determinate progress bar. In this example, you can see an integer is specified to demonstrate the progressbar of a determinate process.
You will see the following output in browser.
The following example demonstrates the default functionality of a indeterminate progress bar. In this example, we set the to false to demonstrate progressbar of an indeterminate process.
You will see the following output in your browser.
Progressbar with Custom Label
The following example demonstrates the progressbar plugin with custom label.
You will see the following output in the browser.
progressbar
That’s all for now and you will see more jQuery plugins in the coming posts.