Библиотека iziToast предоставляет гибкий механизм
позиционирования уведомлений на экране. Помимо стандартных
предустановленных позиций (topRight,
bottomLeft и т.д.), есть возможность указывать
пользовательские координаты, что позволяет точечно
размещать уведомление в любом месте окна браузера.
position и
targetПо умолчанию iziToast использует стандартные позиции.
Для работы с пользовательскими координатами:
iziToast.show({
title: 'Пример',
message: 'Уведомление с пользовательскими координатами',
position: 'custom',
target: 'body', // Элемент, относительно которого будет позиционироваться уведомление
layout: 2 // Размер и форма уведомления (опционально)
});
position: 'custom' — активирует
возможность точного позиционирования.target — указывает контейнер,
относительно которого будут рассчитываться координаты. Если не задано,
берется body.После активации custom позиции, iziToast
позволяет изменять стиль уведомления через объект onOpening
или напрямую через document.querySelector:
iziToast.show({
title: 'Пользовательская позиция',
message: 'Устанавливаем координаты через CSS',
position: 'custom',
onOpening: function(instance, toast){
toast.style.top = '150px';
toast.style.left = '300px';
}
});
top и left задают отступ
от верхнего левого угла контейнера.px) или
процентах (%).Координаты можно рассчитывать динамически, например, относительно размеров окна:
iziToast.show({
title: 'Центр экрана',
message: 'Уведомление посередине окна',
position: 'custom',
onOpening: function(instance, toast){
const windowWidth = window.innerWidth;
const windowHeight = window.innerHeight;
toast.style.left = (windowWidth / 2 - toast.offsetWidth / 2) + 'px';
toast.style.top = (windowHeight / 2 - toast.offsetHeight / 2) + 'px';
}
});
Такой подход позволяет создавать уведомления, которые всегда остаются по центру, независимо от размеров экрана.
Уведомление можно позиционировать относительно конкретного DOM-элемента, используя его размеры и координаты:
const button = document.querySelector('#myButton');
iziToast.show({
title: 'Относительно кнопки',
message: 'Всплывающее уведомление рядом с кнопкой',
position: 'custom',
onOpening: function(instance, toast){
const rect = button.getBoundingClientRect();
toast.style.left = rect.left + 'px';
toast.style.top = (rect.bottom + 10) + 'px';
}
});
getBoundingClientRect() возвращает координаты элемента
относительно окна браузера.+ 10) позволяет не
перекрывать элемент.Для корректного отображения на мобильных устройствах важно учитывать размеры экрана и ориентацию:
iziToast.show({
title: 'Мобильная позиция',
message: 'С адаптацией под экран',
position: 'custom',
onOpening: function(instance, toast){
const padding = 20;
const width = window.innerWidth;
const height = window.innerHeight;
toast.style.left = (width - toast.offsetWidth - padding) + 'px';
toast.style.top = (height - toast.offsetHeight - padding) + 'px';
}
});
Когда одновременно выводятся несколько уведомлений, важно учитывать перекрытие и отступы:
const positions = [
{top: 50, left: 50},
{top: 50, left: 300},
{top: 150, left: 50}
];
positions.forEach(pos => {
iziToast.show({
title: 'Множественные',
message: `Координаты: ${pos.left}px, ${pos.top}px`,
position: 'custom',
onOpening: function(instance, toast){
toast.style.left = pos.left + 'px';
toast.style.top = pos.top + 'px';
}
});
});
position: 'custom' отключает
стандартное смещение iziToast и позволяет полностью управлять
координатами.onOpening гарантирует корректное
позиционирование перед отображением.window.innerWidth,
window.innerHeight и размеры уведомления.animateInside: true для
плавного появления в кастомной позиции.