iziToast — это легкая и гибкая библиотека уведомлений для JavaScript, которая позволяет создавать всплывающие уведомления различного вида и конфигурации. В контексте cookie-баннеров она идеально подходит для реализации ненавязчивых уведомлений о сборе данных и согласии пользователей.
Для работы с iziToast необходимо подключить CSS и JS файлы. Это можно сделать через CDN:
Для проекта на npm или yarn:
npm install izitoast
import iziToast from 'izitoast';
import 'izitoast/dist/css/iziToast.min.css';
Самый простой вариант уведомления о cookies выглядит следующим образом:
iziToast.show({
title: 'Внимание!',
message: 'Наш сайт использует cookies для улучшения работы. Продолжая использовать сайт, вы соглашаетесь с нашей политикой.',
position: 'bottomRight',
timeout: 10000,
close: false,
overlay: true,
progressBar: true,
buttons: [
['', function (instance, toast) {
setCookie('cookies_accepted', 'true', 365);
instance.hide({ transitionOut: 'fadeOut' }, toast);
}],
['', function (instance, toast) {
window.location.href = '/privacy-policy';
}]
]
});
Ключевые моменты:
position: позволяет задать положение баннера на экране.
Для cookie-баннера обычно используют 'bottomRight' или
'bottomLeft'.timeout: длительность отображения. Для обязательных
уведомлений можно выставить 0, чтобы баннер оставался до
действия пользователя.overlay: затемнение фона делает уведомление более
заметным.buttons: массив кнопок с пользовательскими
обработчиками.Для сохранения выбора пользователя необходимо создать функции работы с куки:
function setCookie(name, value, days) {
const date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
const expires = "expires=" + date.toUTCString();
document.cookie = name + "=" + value + ";" + expires + ";path=/";
}
function getCookie(name) {
const cname = name + "=";
const decodedCookie = decodeURIComponent(document.cookie);
const ca = decodedCookie.split(';');
for(let i = 0; i < ca.length; i++) {
let c = ca[i].trim();
if (c.indexOf(cname) === 0) {
return c.substring(cname.length, c.length);
}
}
return "";
}
Перед показом баннера важно проверять, согласился ли пользователь ранее:
if (!getCookie('cookies_accepted')) {
iziToast.show({
title: 'Внимание!',
message: 'Наш сайт использует cookies. Продолжая пользоваться сайтом, вы соглашаетесь с политикой.',
position: 'bottomRight',
timeout: 0,
close: false,
overlay: true,
progressBar: true,
buttons: [
['', function (instance, toast) {
setCookie('cookies_accepted', 'true', 365);
instance.hide({ transitionOut: 'fadeOut' }, toast);
}],
['', function (instance, toast) {
window.location.href = '/privacy-policy';
}]
]
});
}
iziToast предоставляет множество параметров для изменения внешнего вида:
theme: 'light', 'dark' или
пользовательская тема.color: задаёт цвет уведомления.icon: позволяет добавить иконку с указанием класса
FontAwesome или собственного SVG.transitionIn и transitionOut: эффекты
анимации при появлении и исчезновении.Пример баннера с кастомной темой:
iziToast.show({
title: 'Cookies',
message: 'Мы используем cookies для улучшения работы сайта.',
theme: 'dark',
color: 'green',
icon: 'fa fa-cookie-bite',
position: 'bottomRight',
timeout: 0,
close: false,
overlay: true,
progressBar: false,
buttons: [
['', function (instance, toast) {
setCookie('cookies_accepted', 'true', 365);
instance.hide({ transitionOut: 'fadeOut' }, toast);
}]
]
});
timeout: 0 и overlay: true
заставляет пользователя принять решение, но при этом не блокирует весь
интерфейс.iziToast можно комбинировать с jQuery, React или Vue для управления состоянием согласия:
CookieBanner с состоянием visible, управляемым
через useState.v-if для рендеринга
iziToast при отсутствии согласия.