Dom7 — это легкая библиотека для работы с DOM, которая предоставляет удобный и компактный API для манипуляций с элементами страницы, событий и анимаций. Работа с прогрессом загрузки требует понимания взаимодействия с событиями и динамического обновления элементов интерфейса.
Для реализации индикатора прогресса необходимо сначала выбрать
соответствующий элемент в DOM. В Dom7 используется функция
$ или
Dom7(), которая позволяет получать
коллекцию элементов по селектору:
var progressBar = $('.progress-bar'); // Получение элемента по классу
Коллекция возвращает объект Dom7, который поддерживает методы для работы с CSS, атрибутами и событиями. Даже если выбран один элемент, методы будут применяться через внутреннюю итерацию по коллекции.
Наиболее распространённый способ визуализации прогресса —
использование свойства width для элемента полосы:
function updateProgress(percent) {
progressBar.css('width', percent + '%');
}
Метод .css() позволяет задавать стили
напрямую. При необходимости можно добавлять плавную анимацию через
CSS-переходы:
.progress-bar {
width: 0;
height: 4px;
background-color: #007aff;
transition: width 0.3s ease;
}
В этом случае каждый вызов updateProgress будет плавно
увеличивать или уменьшать ширину полосы.
Для отслеживания прогресса загрузки ресурсов, таких как изображения
или AJAX-запросы, Dom7 предоставляет методы для работы с событиями.
Например, для изображений используется событие
load:
var images = $$('img'); // $$ — псевдоним Dom7
var loadedCount = 0;
images.each(function(img) {
$(img).on('load', function() {
loadedCount++;
var percent = Math.round((loadedCount / images.length) * 100);
updateProgress(percent);
});
});
Метод .each() позволяет итерировать
коллекцию элементов, а .on() привязывает
обработчики событий. В данном случае прогресс рассчитывается как
отношение загруженных изображений к общему количеству.
Dom7 интегрируется с обычными методами JavaScript для работы с
сетевыми запросами. Для AJAX можно использовать
XMLHttpRequest и отслеживать событие
progress:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'data.json', true);
xhr.onprogr ess = function(event) {
if (event.lengthComputable) {
var percent = Math.round((event.loaded / event.total) * 100);
updateProgress(percent);
}
};
xhr.onl oad = function() {
if (xhr.status === 200) updateProgress(100);
};
xhr.send();
Dom7 не предоставляет собственный AJAX API, но его методы позволяют
легко интегрировать динамическое обновление интерфейса при работе с
XMLHttpRequest или fetch.
Помимо CSS-переходов, можно использовать события
transitionend для выполнения действий
после завершения анимации:
progressBar.on('transitionend', function() {
if (progressBar.width() === progressBar.parent().width()) {
console.log('Загрузка завершена');
}
});
Метод .width() возвращает текущую
ширину элемента, а .parent() позволяет
обращаться к родительскому контейнеру.
Индикатор прогресса можно создать полностью программно:
var container = $('<div class="progress-container"></div>');
var bar = $('<div class="progress-bar"></div>');
container.append(bar);
$('body').append(container);
function startProgress() {
updateProgress(0);
var percent = 0;
var interval = setInterval(function() {
percent += 10;
updateProgress(percent);
if (percent >= 100) clearInterval(interval);
}, 500);
}
Методы .append() и
.html() позволяют динамически создавать и
вставлять элементы в DOM без необходимости редактировать HTML
вручную.
Для комплексных приложений полезно хранить состояние прогресса в переменных и синхронизировать его с интерфейсом:
var progressState = {
total: 5,
loaded: 0,
increment: function() {
this.loaded++;
var percent = Math.round((this.loaded / this.total) * 100);
updateProgress(percent);
}
};
// Использование при загрузке нескольких ресурсов
resources.forEach(function(res) {
$(res).on('load', function() {
progressState.increment();
});
});
Такой подход позволяет масштабировать систему на большое количество ресурсов, сохраняя простоту управления.
Dom7 легко сочетается с CSS-анимациями или сторонними библиотеками, такими как GSAP, для создания более сложных визуальных эффектов прогресса:
import { gsap } from 'gsap';
function animateProgress(percent) {
gsap.to(progressBar[0], { width: percent + '%', duration: 0.5 });
}
Использование нативного массива через progressBar[0]
необходимо, так как GSAP работает с DOM-элементами напрямую.
Полноценный прогресс-бар на Dom7 обычно включает:
Эта комбинация методов Dom7 обеспечивает простую, но мощную реализацию динамического индикатора прогресса на веб-странице.