Dom7 — это легковесная библиотека для работы с DOM, вдохновлённая jQuery, используемая в первую очередь в экосистеме Framework7. Одним из мощных аспектов Dom7 является возможность расширения её функционала с помощью собственных плагинов, что позволяет создавать переиспользуемые и модульные компоненты для работы с DOM-элементами.
Плагин Dom7 — это обычная функция, которая добавляется к прототипу объекта Dom7. Любая функция, добавленная таким образом, становится доступной для всех объектов Dom7, что позволяет вызывать её напрямую на выбранных элементах:
Dom7.prototype.myPlugin = function(options) {
const settings = Object.assign({
color: 'red',
duration: 300
}, options);
this.each((el) => {
el.style.transition = `all ${settings.duration}ms`;
el.style.color = settings.color;
});
return this;
};
Ключевые моменты:
this внутри плагина всегда ссылается на объект Dom7,
содержащий выбранные элементы.this.each позволяет обработать каждый
элемент выборки.this обеспечивает цепочку вызовов методов
(chaining).Плагины Dom7 часто используют объект options для
конфигурации. Слияние пользовательских настроек с дефолтными выполняется
через Object.assign или деструктуризацию:
const defaults = {
background: 'yellow',
fontSize: '16px'
};
const settings = { ...defaults, ...options };
Это позволяет гибко управлять поведением плагина и сохраняет совместимость с разными версиями кода.
Для упрощения работы с DOM внутри плагина можно использовать встроенные методы Dom7, например:
addClass / removeClass /
toggleClass — управление классами.css — установка стилей.on / off — работа с событиями.attr / prop — управление атрибутами и
свойствами.Пример плагина с использованием встроенных методов:
Dom7.prototype.highlight = function(color = 'yellow') {
this.css('background-color', color);
this.on('mouseenter', function() {
this.style.backgroundColor = '';
});
return this;
};
Возврат this в конце функции — обязательный элемент при
создании плагинов, если требуется возможность цепочек вызовов:
$$('.item')
.highlight('lightblue')
.addClass('active')
.on('click', () => console.log('Clicked'));
Отсутствие возврата объекта Dom7 приведёт к разрыву цепочки и невозможности дальнейшего вызова методов.
Dom7 позволяет удобно работать с событиями. При создании плагинов рекомендуется использовать именованные функции для добавления и удаления обработчиков:
Dom7.prototype.toggleClick = function(callback) {
function handler(e) {
callback.call(this, e);
}
this.on('click', handler);
return this;
};
Это обеспечивает возможность последующего удаления обработчика через
off.
Иногда требуется хранить данные между вызовами плагина для одного
элемента. Для этого можно использовать атрибуты data-* или
встроенный объект Dom7 через el.f7PluginData:
Dom7.prototype.counter = function() {
this.each((el) => {
if (!el.f7PluginData) el.f7PluginData = { count: 0 };
el.f7PluginData.count += 1;
el.textContent = el.f7PluginData.count;
});
return this;
};
Использование внутреннего состояния позволяет создавать интерактивные компоненты без глобальных переменных.
Dom7 поддерживает модульный подход. Новый плагин может вызывать существующие методы:
Dom7.prototype.flash = function(color = 'red', duration = 500) {
this.each((el) => {
const originalColor = el.style.backgroundColor;
Dom7(el).css('background-color', color);
setTimeout(() => Dom7(el).css('background-color', originalColor), duration);
});
return this;
};
Такой подход повышает переиспользуемость и сокращает дублирование кода.
this в переменные внутри цикла each для
уменьшения повторного обхода DOM.style без необходимости — лучше использовать классы.off, если плагин временный или перезапускается.В экосистеме Framework7 плагины Dom7 часто используются для создания кастомных UI-компонентов: слайдеров, всплывающих окон, интерактивных списков. Их можно подключать как отдельные модули или расширять существующие, что делает архитектуру приложения модульной и легко поддерживаемой.
Плагин Dom7 становится полноценным строительным блоком, позволяя создавать сложное поведение с минимальным количеством кода, сохраняя простоту цепочек вызовов и совместимость с другими инструментами.