Bliss.js — это лёгкая библиотека для работы с DOM и событийной
моделью в JavaScript, оптимизированная для минимизации шаблонного кода.
При использовании с Vue она не заменяет реактивность фреймворка, но
позволяет выполнять низкоуровневые манипуляции с элементами DOM,
обходясь без прямого обращения к ref или
querySelector в сложных случаях.
Установка производится через npm:
npm install bliss-js
Подключение в проекте Vue осуществляется стандартным образом:
import Bliss from 'bliss-js';
Вариант использования через глобальный объект Vue возможен через плагин:
import Bliss from 'bliss-js';
export default {
install(app) {
app.config.globalProperties.$bliss = Bliss;
}
}
После этого любой компонент Vue может обращаться к методам Bliss
через this.$bliss.
Bliss.js предоставляет удобные методы для работы с элементами DOM, аналогичные нативным методам, но с синтаксисом, упрощающим цепочки операций.
Примеры основных методов:
Bliss.$(selector) — возвращает первый элемент,
соответствующий селектору.Bliss.$$(selector) — возвращает массив всех элементов,
соответствующих селектору.Bliss.addClass(element, className) — добавление
класса.Bliss.removeClass(element, className) — удаление
класса.Bliss.toggleClass(element, className) — переключение
класса.Bliss.attr(element, attribute, value) — установка
атрибута.Bliss.on(element, event, handler) — добавление
обработчика события.Bliss.off(element, event, handler) — удаление
обработчика события.Пример использования в Vue-компоненте:
import Bliss from 'bliss-js';
export default {
mounted() {
const button = Bliss.$('#my-button');
Bliss.on(button, 'click', () => {
Bliss.toggleClass(button, 'active');
});
}
}
Здесь mounted() гарантирует, что элемент существует в
DOM, что важно для корректной работы методов Bliss.
Bliss позволяет работать с атрибутами и стилями элементов в цепочках, упрощая код по сравнению с нативным DOM API.
const box = Bliss.$('#box');
Bliss.attr(box, 'data-state', 'expanded');
Bliss.css(box, {
width: '200px',
height: '200px',
backgroundColor: '#f0f0f0'
});
Метод Bliss.css() принимает объект с ключами
CSS-свойств. Это упрощает одновременную установку нескольких стилей без
необходимости по отдельности присваивать каждое свойство через
element.style.
Bliss.js упрощает делегирование событий и их управление. Основная модель — это добавление и удаление обработчиков с минимальной обвязкой.
const list = Bliss.$('#list');
Bliss.on(list, 'click', 'li', (event) => {
const item = event.target;
Bliss.toggleClass(item, 'selected');
});
Делегирование позволяет назначать обработчик на родительский элемент, при этом событие автоматически распространяется на дочерние элементы, удовлетворяющие селектору.
Удаление обработчика:
const handler = (event) => console.log(event.target);
Bliss.on(list, 'click', handler);
Bliss.off(list, 'click', handler);
Это важно в Vue, где компоненты могут размонтироваться, и отсутствие удаления обработчиков приведёт к утечкам памяти.
Bliss.js хорошо сочетается с реактивными переменными Vue, особенно для манипуляций с классами и атрибутами в зависимости от состояния компонента.
import { ref, watch } from 'vue';
import Bliss from 'bliss-js';
export default {
setup() {
const isActive = ref(false);
watch(isActive, (newValue) => {
const element = Bliss.$('#toggle-element');
if (newValue) {
Bliss.addClass(element, 'active');
} else {
Bliss.removeClass(element, 'active');
}
});
return { isActive };
}
}
Такой подход объединяет реактивность Vue и удобные методы работы с
DOM от Bliss, минимизируя прямое использование
document.querySelector.
Bliss.js можно использовать совместно с асинхронными событиями, например, для обработки сетевых запросов, анимаций или таймеров.
import Bliss from 'bliss-js';
export default {
async mounted() {
const button = Bliss.$('#fetch-button');
Bliss.on(button, 'click', async () => {
const data = await fetch('/api/data').then(res => res.json());
const container = Bliss.$('#container');
Bliss.html(container, JSON.stringify(data, null, 2));
});
}
}
Метод Bliss.html(element, content) заменяет внутреннее
содержимое элемента и автоматически работает с безопасной подстановкой
текста.
Bliss.js позволяет добавлять и удалять классы, необходимые для CSS-анимаций и Vue transition. Это удобно для сложных сценариев, где стандартные директивы Vue недостаточны:
import Bliss from 'bliss-js';
export default {
mounted() {
const modal = Bliss.$('#modal');
Bliss.on(Bliss.$('#open-modal'), 'click', () => {
Bliss.addClass(modal, 'fade-in');
setTimeout(() => Bliss.removeClass(modal, 'fade-in'), 300);
});
}
}
Такой подход позволяет тонко контролировать временные интервалы и последовательность анимаций, сохраняя интеграцию с реактивной моделью Vue.
Bliss хорошо подходит для небольших вспомогательных компонентов, где требуется прямое управление DOM без полной зависимости от Vue ref и v-bind. Использование методов Bliss сокращает объем кода и делает компоненты более декларативными по структуре DOM, при этом не нарушая реактивность Vue.
Методы Bliss могут быть вынесены в отдельный утилитный модуль и использоваться во всех компонентах проекта, что упрощает поддержку и тестирование.