FastComments.com

FastComments Image Chat позволяет проводить интерактивные обсуждения на изображениях, давая пользователям возможность кликать в любом месте изображения для создания точек обсуждения. Пользователи могут кликать по конкретным частям изображения, чтобы начать разговоры об этих участках, создавая визуальные маркеры, которые показывают, где расположены обсуждения.

Эта функция отлично подходит для обратной связи по дизайну, обзоров продуктов, учебных материалов с диаграммами, фотогалерей с комментариями и любых ситуаций, где нужны контекстуальные обсуждения, привязанные к конкретным местам на изображении.

Адаптивный дизайн Internal Link

Percentage-Based Positioning

Image Chat использует координаты, основанные на процентах, вместо пиксельных координат для позиционирования маркеров чата на изображениях. Когда пользователь кликает по изображению, виджет преобразует пиксельные координаты клика в проценты от ширины и высоты изображения. Такой подход гарантирует, что маркеры останутся в правильном положении независимо от того, как изображение отображается.

Например, если пользователь кликнул на 250 пикселей от левого края изображения шириной 1000px, виджет сохраняет это как 25% от левого края. Когда другой пользователь просматривает то же изображение шириной 500px на мобильном устройстве, маркер отображается на 125 пикселях от левого края, что по-прежнему составляет 25% от ширины.

Benefits for Responsive Layouts

Эта процентная система позволяет Image Chat корректно работать на всех размерах устройств и ориентациях. Ваши изображения могут отображаться в различных размерах в зависимости от ширины экрана, правил CSS или ограничений контейнера, но маркеры всегда выравниваются правильно с предполагаемыми местами.

Пользователи на настольных компьютерах с большими мониторами видят маркеры в тех же относительных позициях, что и пользователи на смартфонах с маленькими экранами. Маркеры масштабируются пропорционально самому изображению.

Image Scaling and Aspect Ratio

Пока ваше изображение сохраняет соотношение сторон при масштабировании (что является поведением браузера по умолчанию), маркеры, основанные на процентах, останутся идеально выровненными. Виджет предполагает, что изображения масштабируются пропорционально, и вычисляет позиции, исходя из этого предположения.

Если вы применяете CSS, который искажает соотношение сторон изображения (например, используя object-fit: cover с конкретными размерами), позиции маркеров могут не совпадать правильно. Для наилучших результатов позвольте изображениям масштабироваться естественным образом или используйте object-fit: contain, чтобы сохранить соотношение сторон.

Chat Square Sizing

Визуальный размер маркеров чата также основан на процентах. Опция конфигурации chatSquarePercentage по умолчанию равна 5%, то есть каждый квадрат составляет 5% от ширины изображения. Это обеспечивает стабильную визуальную плотность на изображениях разных размеров.

На изображении шириной 1000px при стандартной настройке 5% маркеры имеют размер 50px на 50px. На изображении шириной 500px те же маркеры будут 25px на 25px. Они остаются пропорциональными размеру изображения.

Mobile Behavior

На экранах шириной менее 768px Image Chat переключается на оптимизированную для мобильных устройств компоновку. Окна чата открываются во весь экран вместо плавающего рядом с маркером. Это обеспечивает лучшее удобство использования на маленьких экранах, где плавающие окна могли бы закрывать слишком большую часть изображения.

Сами маркеры остаются видимыми и кликабельными в своих позициях, заданных в процентах. Пользователи по-прежнему могут видеть, где расположены все обсуждения, и нажимать на маркеры, чтобы открыть полноэкранный интерфейс чата.

Dynamic Image Loading

Процентная система корректно работает даже когда изображения загружаются асинхронно или меняют размер после загрузки страницы. Виджет отслеживает элемент изображения и пересчитывает позиции маркеров всякий раз, когда меняются размеры изображения.

Если вы используете ленивую загрузку изображений или реализуете адаптивные изображения с разными размерами на разных брейкпоинтах, маркеры автоматически подстраиваются при изменении размера изображения.

Cross-Device Consistency

Поскольку координаты сохраняются в базе данных в виде процентов, обсуждение, созданное на настольном компьютере, отображается в точно том же относительном месте при просмотре на планшете или телефоне. Пользователи могут сотрудничать с разных устройств без несоответствий в позиционировании.

Это работает в обе стороны. Обсуждение, созданное путем нажатия на конкретное место на мобильном устройстве, появляется в той же относительной позиции при просмотре на большом настольном мониторе.

Viewport Considerations

Виджет вычисляет проценты относительно самого элемента изображения, а не вьюпорта. Это означает, что прокрутка страницы или изменение размера окна браузера не влияют на позиции маркеров. Маркеры остаются привязанными к своим местам на изображении независимо от изменений в вьюпорте.

Future-Proofing Content

Процентный подход делает ваши обсуждения изображений устойчивыми к изменениям в макете, дизайне или экосистеме устройств. По мере появления новых размеров экранов и устройств существующие обсуждения продолжат отображаться корректно без необходимости обновлений или миграций.

Настройка Internal Link

Поддержка тёмного режима

Image Chat включает встроенную поддержку тёмного режима. Когда вы устанавливаете hasDarkBackground: true в вашей конфигурации, окна чата и элементы интерфейса автоматически подстраиваются под тёмный фон.

FastCommentsImageChat(imageElement, {
    tenantId: 'demo',
    hasDarkBackground: true
});

Стилизация для тёмного режима применяется к окнам чата, квадратам-маркерам и всем интерактивным элементам. Если на вашем сайте есть переключатель тёмного режима, вы можете инициализировать виджет заново при смене режима или использовать подход с классом body, описанный ниже.

Динамический тёмный режим

Если тёмный режим на вашем сайте управляется добавлением класса .dark к элементу body, интерфейс Image Chat автоматически учтёт это без необходимости повторной инициализации. Стили виджета разработаны так, чтобы реагировать на наличие этого класса.

/* Ваш CSS для тёмного режима */
body.dark {
    background: #1a1a1a;
    color: #ffffff;
}

Пользовательская стилизация с помощью CSS

Вы можете настроить внешний вид маркеров, окон чата и других элементов с помощью CSS. Виджет добавляет определённые классы, которые вы можете таргетировать в своём файле стилей.

Квадраты и окна чата используют систему стилизации всплывающих комментариев FastComments, поэтому любые кастомизации, которые вы применили к стандартному виджету комментариев, также повлияют на Image Chat.

Размер маркеров чата

Опция chatSquarePercentage контролирует размер кликабельных маркеров. По умолчанию это 5% от ширины изображения:

FastCommentsImageChat(imageElement, {
    tenantId: 'demo',
    chatSquarePercentage: 7  // Больше, более заметные квадраты
});

Меньшие значения создают более тонкие маркеры, которые сливаются с изображением. Большие значения делают маркеры более заметными и лёгкими для нажатия, особенно на мобильных устройствах или для целей доступности.

Поведение на мобильных устройствах

На экранах шириной менее 768px Image Chat автоматически переключается на оптимизированную для мобильных устройств компоновку. Окна чата отображаются во всю ширину экрана вместо того, чтобы плавать рядом с маркерами, что улучшает удобство использования на маленьких экранах.

Маркеры остаются видимыми в своих адаптивных позициях на изображении. Пользователи могут нажать любой маркер, чтобы открыть полноэкранный интерфейс чата. Это поведение встроено и не требует дополнительной настройки.

Внешний вид окна чата

Окна чата имеют ширину 300px на десктопе с указательной стрелкой 16px, указывающей на маркер. Окна автоматически позиционируются в зависимости от доступного пространства в области просмотра, используя классы позиционирования, такие как to-right, to-left, to-top и to-bottom.

Вы можете добавить собственный CSS, чтобы изменить цвета, шрифты, отступы или другие визуальные свойства этих окон. Окна чата используют ту же структуру компонентов, что и стандартный виджет FastComments, поэтому они наследуют любые глобальные настройки, которые вы применили.

Отложенная инициализация

Окна чата инициализируются при наведении для десктоп-пользователей или сразу при создании. Это снижает начальную нагрузку, рендеря интерфейс чата только тогда, когда пользователи действительно взаимодействуют с маркером.

Отложенная инициализация происходит прозрачно. Пользователи не замечают задержки, но браузеру не нужно рендерить десятки скрытых окон чата, если на изображении много маркеров.

Локализация

Image Chat поддерживает те же параметры локализации, что и стандартный виджет FastComments. Установите опцию locale, чтобы отображать текст интерфейса на разных языках:

FastCommentsImageChat(imageElement, {
    tenantId: 'demo',
    locale: 'fr'  // Французский
});

FastComments поддерживает десятки языков. Настройка locale влияет на весь текст интерфейса, включая подсказки, кнопки и текст заполнителей.

Унаследованные параметры настройки

Поскольку Image Chat расширяет стандартный виджет комментариев, он наследует все параметры настройки базового виджета. Это включает пользовательские CSS-классы, собственные переводы, настройку аватаров, форматирование дат и многое другое.

Смотрите основную документацию по настройке FastComments для полного списка доступных параметров настройки.

Работа с пользовательскими шрифтами

Если на вашем сайте используются пользовательские шрифты, интерфейс Image Chat унаследует эти шрифты из CSS вашей страницы. Окна чата рендерятся внутри DOM вашей страницы и учитывают существующие настройки типографики.

Для лучшего результата убедитесь, что ваши пользовательские шрифты загружены до инициализации Image Chat, или будьте готовы к кратковременному появлению нестилизованного текста, пока шрифты загружаются.

Визуальный дизайн маркеров

Квадратные маркеры имеют сдержанный визуальный дизайн, который делает их заметными, но не загромождает изображение. Вы можете настроить их внешний вид через CSS, если хотите другой визуальный стиль.

Маркеры включают состояния при наведении, которые дают обратную связь, когда пользователь перемещает по ним мышь. На сенсорных устройствах взаимодействие по тапу даёт мгновенную обратную связь, открывая окно чата.


Синхронизация в реальном времени Internal Link

Real-Time Updates

Image Chat использует WebSocket-подключения для синхронизации всех разговоров в реальном времени между всеми подключенными пользователями. Когда кто-то создаёт новый маркер, добавляет комментарий или удаляет обсуждение, все остальные пользователи, просматривающие ту же картинку, сразу видят обновление без перезагрузки.

How WebSocket Sync Works

Когда вы инициализируете Image Chat, виджет устанавливает WebSocket-подключение к серверам FastComments. Это подключение остаётся открытым на протяжении сеанса пользователя и слушает обновления, связанные с текущим изображением.

Система WebSocket использует три типа широковещательных сообщений для Image Chat. Событие new-image-chat срабатывает, когда кто-то создаёт новый маркер на изображении. Событие image-chat-updated срабатывает, когда кто-то обновляет существующий разговор. Событие deleted-image-chat срабатывает, когда кто-то удаляет маркер.

Broadcast ID System

Чтобы избежать эффекта эха, когда пользователи видят собственные действия, отсылаемые обратно им, каждое обновление включает уникальный broadcastId. Когда пользователь создаёт или обновляет маркер, его клиент генерирует UUID для этой операции. Когда WebSocket рассылает обновление всем клиентам, исходный клиент игнорирует это обновление, потому что оно совпадает с его собственным broadcastId.

Это обеспечивает плавное взаимодействие: пользователи видят свои изменения сразу в интерфейсе без ожидания полного круга через сервер, при этом все остальные пользователи также получают обновление.

Connection Resilience

Если WebSocket-подключение обрывается из-за проблем с сетью или техобслуживания сервера, виджет автоматически пытается переподключиться. В период переподключения пользователи всё ещё могут взаимодействовать с существующими маркерами, но они не будут видеть обновления от других пользователей до восстановления соединения.

После восстановления соединения виджет повторно синхронизируется, чтобы убедиться, что никакие обновления не были пропущены. Это происходит прозрачно и не требует вмешательства пользователя.

Bandwidth Considerations

Сообщения WebSocket лёгкие и содержат только необходимую информацию для синхронизации состояния. Создание нового маркера обычно использует менее 1KB трафика. Система также включает интеллектуальную пакетную обработку, чтобы уменьшить частоту сообщений в периоды высокой активности.

Ваши показатели использования на панели управления FastComments отслеживают pubSubMessageCount и pubSubBandwidth, чтобы вы могли мониторить активность синхронизации в реальном времени на своих сайтах.

Cross-Tab Synchronization

Если пользователь открыл одну и ту же страницу в нескольких вкладках браузера, обновления в одной вкладке появляются сразу в других вкладках. Это работает через ту же систему синхронизации WebSocket и не требует дополнительной настройки.

Пользователи могут иметь ваш сайт открытым на нескольких устройствах одновременно, и все они будут оставаться синхронизированными. Маркер, созданный на настольном компьютере, появляется мгновенно на планшете пользователя, если оба устройства просматривают одно и то же изображение.

Security

Сообщения WebSocket передаются по защищённым соединениям (WSS) и включают проверку арендатора, чтобы гарантировать, что пользователи получают только те обновления, к которым они имеют доступ. Сервер проверяет все операции перед их трансляцией, чтобы предотвратить неавторизованный доступ или манипуляции.

Offline Behavior

Когда пользователи полностью офлайн, они всё ещё могут просматривать существующие маркеры, но не могут создавать новые и не видят обновлений от других. Виджет обнаруживает состояние офлайн и отображает соответствующие сообщения.

Если пользователь пытается создать маркер будучи офлайн, а затем снова выходит в сеть, операция завершится неудачей, а не будет поставлена в очередь, чтобы обеспечить согласованность данных. Пользователям следует повторить операцию после восстановления соединения.

Performance Impact

WebSocket-подключение минимально влияет на производительность. Подключение остаётся в простое, когда обновлений не происходит, и обрабатывает сообщения только при активности. На типичном изображении с умеренной активностью маркеров WebSocket использует меньше CPU, чем рендеринг самого изображения.

Для страниц с сотнями одновременных пользователей и высокой активностью по созданию маркеров система масштабируется горизонтально, чтобы поддерживать производительность без влияния на отдельные клиентские подключения.

Collaborative Use Cases

Синхронизация в реальном времени делает Image Chat особенно мощным для совместной работы. Команды дизайнеров могут одновременно просматривать макеты, при этом все видят размещение маркеров в реальном времени. Команды поддержки клиентов могут совместно аннотировать скриншоты для выявления проблем. Учебные группы могут обсуждать диаграммы, при этом все участники видят маркеры друг друга по мере их создания.

Немедленная обратная связь создаёт более увлекательный и продуктивный опыт совместной работы по сравнению с традиционными системами комментариев, где пользователям нужно обновлять страницу, чтобы увидеть изменения.


Есть вопросы?

Вот и всё по FastComments Image Chat! Если у вас есть вопросы, нужна помощь с внедрением или есть предложения по функциям, пожалуйста, сообщите нам ниже или свяжитесь с нашей службой поддержки.

Посмотрите живую демо-версию на нашей странице демо, чтобы увидеть Image Chat в действии.