FastComments.com

FastComments Image Chat maakt interactieve discussies over afbeeldingen mogelijk door gebruikers toe te staan overal op een afbeelding te klikken om discussiepunten aan te maken. Gebruikers kunnen op specifieke delen van afbeeldingen klikken om gesprekken over die gebieden te starten, waardoor visuele markeringen worden gemaakt die laten zien waar discussies zich bevinden.

Deze functie is perfect voor ontwerpfeedback, productbeoordelingen, educatief materiaal met diagrammen, fotogalerijen met commentaar, en elke situatie waarin je contextuele discussies wilt die verankerd zijn aan specifieke locaties op afbeeldingen.

Responsief ontwerp Internal Link

Op percentages gebaseerde positionering

Image Chat gebruikt op percentages gebaseerde coördinaten in plaats van pixelcoördinaten om chatmarkeringen op afbeeldingen te positioneren. Wanneer een gebruiker op een afbeelding klikt, zet de widget de pixelcoördinaten van de klik om in percentages van de afbeeldingsbreedte en -hoogte. Deze aanpak zorgt ervoor dat markeringen op de juiste plaats blijven, ongeacht hoe de afbeelding wordt weergegeven.

Als voorbeeld: als een gebruiker 250 pixels vanaf de linkerrand van een afbeelding van 1000px breed klikt, slaat de widget dit op als 25% vanaf links. Wanneer een andere gebruiker dezelfde afbeelding op een mobiel apparaat op 500px breed bekijkt, verschijnt de markering op 125 pixels vanaf links, wat nog steeds 25% van de breedte is.

Voordelen voor responsieve lay-outs

Dit percentagesysteem zorgt ervoor dat Image Chat naadloos werkt op alle apparaatsgroottes en -oriëntaties. Uw afbeeldingen kunnen afhankelijk van schermbreedte, CSS-regels of containerbeperkingen in verschillende formaten worden weergegeven, maar de markeringen blijven altijd correct uitgelijnd met de bedoelde locaties.

Gebruikers op desktopcomputers met grote monitoren zien markeringen op dezelfde relatieve posities als gebruikers op smartphones met kleine schermen. De markeringen schalen evenredig mee met de afbeelding zelf.

Schaal en beeldverhouding van afbeeldingen

Zolang uw afbeelding zijn beeldverhouding behoudt tijdens het schalen (wat het standaardgedrag van browsers is), blijven de op percentages gebaseerde markeringen perfect uitgelijnd. De widget gaat ervan uit dat afbeeldingen proportioneel schalen en berekent posities op basis van die aanname.

Als u CSS toepast die de beeldverhouding van de afbeelding vervormt (zoals het gebruik van object-fit: cover met specifieke afmetingen), kunnen de markeringen mogelijk niet correct uitgelijnd zijn. Voor de beste resultaten laat u afbeeldingen natuurlijk schalen of gebruikt u object-fit: contain om de beeldverhouding te behouden.

Grootte van chatvierkanten

Het visuele formaat van chatmarkeringen is ook op percentages gebaseerd. De configuratieoptie chatSquarePercentage staat standaard op 5%, wat betekent dat elk vierkant 5% van de afbeeldingsbreedte is. Dit zorgt voor een consistente visuele weging op verschillende afbeeldingsgroottes.

Op een afbeelding van 1000px breed met de standaardinstelling van 5% zijn markeringen 50px vierkant. Op een afbeelding van 500px breed zijn dezelfde markeringen 25px vierkant. Ze blijven evenredig met de afbeelding.

Gedrag op mobiel

Op schermen die smaller zijn dan 768px schakelt Image Chat over naar een mobiel-geoptimaliseerde lay-out. Chatvensters openen in volledig scherm in plaats van zwevend naast de markering. Dit zorgt voor betere bruikbaarheid op kleine schermen waar zwevende vensters te veel van de afbeelding zouden bedekken.

De markeringen zelf blijven zichtbaar en klikbaar op hun op percentages gebaseerde posities. Gebruikers kunnen nog steeds zien waar alle discussies zich bevinden en op markeringen tikken om de volwaardige chatinterface in volledig scherm te openen.

Dynamisch laden van afbeeldingen

Het op percentages gebaseerde systeem werkt correct, zelfs wanneer afbeeldingen asynchroon laden of van grootte veranderen nadat de pagina is geladen. De widget bewaakt het afbeeldings-element en herberekent markeerposities wanneer de afbeeldingsdimensies veranderen.

Als u afbeeldingen lazy-loadt of responsieve afbeeldingen implementeert met verschillende groottes bij verschillende breakpoints, passen de markeringen zich automatisch aan wanneer de afbeeldingsgrootte verandert.

Consistentie tussen apparaten

Omdat coördinaten als percentages in de database worden opgeslagen, verschijnt een discussie die op een desktopcomputer is aangemaakt op exact dezelfde relatieve locatie wanneer deze op een tablet of telefoon wordt bekeken. Gebruikers kunnen samenwerken tussen apparaten zonder positionele inconsistenties.

Dit werkt in twee richtingen. Een discussie die is aangemaakt door op een specifieke plek op een mobiel apparaat te tikken, verschijnt op dezelfde relatieve positie wanneer deze op een grote desktopmonitor wordt bekeken.

Viewport-overwegingen

De widget berekent percentages relatief ten opzichte van het afbeeldings-element zelf, niet ten opzichte van de viewport. Dit betekent dat scrollen op de pagina of het veranderen van de grootte van het browservenster geen invloed heeft op markeerposities. Markeringen blijven verankerd op hun locaties op de afbeelding ongeacht wijzigingen in de viewport.

Toekomstbestendigheid van content

De op percentages gebaseerde aanpak maakt uw afbeeldingsdiscussies bestand tegen veranderingen in lay-out, ontwerp of apparaatecosysteem. Naarmate nieuwe schermformaten en apparaten verschijnen, blijven bestaande discussies correct worden weergegeven zonder dat updates of migraties nodig zijn.

Aanpassing Internal Link

Ondersteuning voor donkere modus

Image Chat bevat ingebouwde ondersteuning voor donkere modus. Als u hasDarkBackground: true instelt in uw configuratie, passen de chatvensters en UI-elementen zich automatisch aan zodat ze goed werken op donkere achtergronden.

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

De styling voor donkere modus geldt voor chatvensters, marker-vierkanten en alle interactieve elementen. Als uw site een schakelaar voor donkere modus heeft, kunt u de widget opnieuw initialiseren wanneer de modus verandert, of de body-class methode gebruiken die hieronder wordt beschreven.

Dynamische donkere modus

Als de donkere modus van uw site wordt geregeld door een .dark-klasse toe te voegen aan het body-element, zal de Image Chat UI dit automatisch respecteren zonder dat herinitialisatie nodig is. De stijlen van de widget zijn ontworpen om te reageren op de aanwezigheid van deze klasse.

/* Uw CSS voor donkere modus */
body.dark {
    background: #1a1a1a;
    color: #ffffff;
}

Aangepaste styling met CSS

U kunt het uiterlijk van markers, chatvensters en andere elementen aanpassen met CSS. De widget voegt specifieke klassen toe die u in uw stylesheet kunt targeten.

De chatvierkanten en vensters gebruiken het FastComments comment bubble-stylingsysteem, dus eventuele aanpassingen die u op de standaard commentaarwidget hebt toegepast, beïnvloeden ook Image Chat.

Grootte van chatvierkanten

De optie chatSquarePercentage regelt de grootte van de aanklikbare markers. Standaard is dit 5% van de afbeeldingsbreedte:

FastCommentsImageChat(imageElement, {
    tenantId: 'demo',
    chatSquarePercentage: 7  // Grotere, beter zichtbare vierkanten
});

Kleinere waarden maken subtielere markers die in de afbeelding opgaan. Grotere waarden maken markers prominenter en gemakkelijker aan te klikken, vooral op mobiele apparaten of voor toegankelijkheidsdoeleinden.

Gedrag op mobiel

Op schermen smaller dan 768px schakelt Image Chat automatisch over naar een voor mobiel geoptimaliseerde lay-out. Chatvensters verschijnen in volledig scherm in plaats van naast de markers te zweven, wat betere bruikbaarheid op kleine schermen biedt.

De markers blijven zichtbaar op hun responsieve posities op de afbeelding. Gebruikers kunnen op een marker tikken om de chatinterface in volledig scherm te openen. Dit gedrag is ingebouwd en vereist geen configuratie.

Uiterlijk van het chatvenster

Chatvensters zijn 300px breed op desktop met een pijl van 16px die naar de marker wijst. De vensters positioneren zichzelf automatisch op basis van de beschikbare viewport-ruimte, met positioneringsklassen zoals to-right, to-left, to-top en to-bottom.

U kunt aangepaste CSS toevoegen om kleuren, lettertypen, ruimte of andere visuele eigenschappen van deze vensters aan te passen. De chatvensters gebruiken dezelfde componentstructuur als de standaard FastComments-widget, dus ze erven eventuele globale aanpassingen die u hebt toegepast.

Luie initialisatie

Chatvensters initialiseren bij hover voor desktopgebruikers of onmiddellijk wanneer ze worden aangemaakt. Dit vermindert de initiële laadtijd doordat de chatinterface alleen wordt gerenderd wanneer gebruikers daadwerkelijk met een marker interageren.

De luie initialisatie gebeurt transparant. Gebruikers merken geen vertraging, maar de browser hoeft niet tientallen verborgen chatvensters te renderen als u veel markers op een afbeelding hebt.

Lokalisatie

Image Chat ondersteunt alle dezelfde lokalisatie-opties als de standaard FastComments-widget. Stel de locale-optie in om UI-tekst in verschillende talen weer te geven:

FastCommentsImageChat(imageElement, {
    tenantId: 'demo',
    locale: 'fr'  // Frans
});

FastComments ondersteunt tientallen talen. De locale-instelling beïnvloedt alle UI-tekst, inclusief prompts, knoppen en placeholder-tekst.

Geërfde aanpassingsopties

Omdat Image Chat de standaard commentaarwidget uitbreidt, erft het alle aanpassingsopties van de basiswidget. Dit omvat aangepaste CSS-klassen, aangepaste vertalingen, avatar-aanpassing, datumopmaak en nog veel meer.

Zie de hoofddocumentatie van FastComments voor aanpassingen voor de volledige lijst met beschikbare aanpassingsopties.

Werken met aangepaste lettertypen

Als uw site aangepaste lettertypen gebruikt, erft de Image Chat UI die lettertypen uit de CSS van uw pagina. De chatvensters worden gerenderd binnen de DOM van uw pagina en respecteren uw bestaande typografie-instellingen.

Voor het beste resultaat zorgt u ervoor dat uw aangepaste lettertypen zijn geladen voordat u Image Chat initialiseert, of accepteert u dat er een korte flash van ongestylede tekst kan optreden terwijl de lettertypen laden.

Visueel ontwerp van markers

De vierkante markers hebben een subtiel visueel ontwerp dat ze merkbaar maakt zonder de afbeelding te overheersen. U kunt hun uiterlijk aanpassen met CSS als u een andere visuele behandeling wilt.

De markers bevatten hover-states die feedback geven wanneer gebruikers hun muis erover bewegen. Op aanraakapparaten geeft de tikinteractie directe feedback door het chatvenster te openen.

Live-synchronisatie Internal Link

Realtime-updates

Image Chat gebruikt WebSocket-verbindingen om alle gesprekken in realtime te synchroniseren voor alle verbonden gebruikers. Wanneer iemand een nieuwe marker maakt, een opmerking toevoegt of een discussie verwijdert, zien alle andere gebruikers die dezelfde afbeelding bekijken de update onmiddellijk zonder te vernieuwen.

Hoe WebSocket-synchronisatie werkt

Wanneer je Image Chat initialiseert, maakt de widget een WebSocket-verbinding met de FastComments-servers. Deze verbinding blijft open voor de duur van de gebruikerssessie en luistert naar updates die betrekking hebben op de huidige afbeelding.

Het WebSocket-systeem gebruikt drie typen broadcast-berichten voor Image Chat. Het new-image-chat event wordt afgevuurd wanneer iemand een nieuwe marker op de afbeelding aanmaakt. Het image-chat-updated event wordt afgevuurd wanneer iemand een bestaand gesprek bijwerkt. Het deleted-image-chat event wordt afgevuurd wanneer iemand een marker verwijdert.

Broadcast-ID-systeem

Om echo-effecten te voorkomen waarbij gebruikers hun eigen acties teruggezien krijgen, bevat elke update een unieke broadcastId. Wanneer een gebruiker een marker aanmaakt of bijwerkt, genereert hun client een UUID voor die bewerking. Wanneer de WebSocket de update terug uitzendt naar alle clients, negeert de oorspronkelijke client de update omdat deze overeenkomt met zijn eigen broadcastId.

Dit zorgt voor een soepele interactie waarbij gebruikers hun wijzigingen onmiddellijk in de UI zien zonder te wachten op de roundtrip via de server, terwijl alle andere gebruikers toch de update ontvangen.

Verbindingsherstel

Als de WebSocket-verbinding wegvalt vanwege netwerkproblemen of serveronderhoud, probeert de widget automatisch opnieuw verbinding te maken. Tijdens de periode van opnieuw verbinden kunnen gebruikers nog steeds met bestaande markers interageren, maar ze zien geen realtime-updates van andere gebruikers totdat de verbinding is hersteld.

Zodra de verbinding is hersteld, synchroniseert de widget opnieuw om zeker te zijn dat er geen updates zijn gemist. Dit gebeurt transparant zonder dat de gebruiker iets hoeft te doen.

Bandbreedte-overwegingen

WebSocket-berichten zijn lichtgewicht en bevatten alleen de essentiële informatie die nodig is om de status te synchroniseren. Het aanmaken van een nieuwe marker gebruikt doorgaans minder dan 1KB aan bandbreedte. Het systeem bevat ook intelligente batching om de frequentie van berichten te verminderen tijdens periodes met veel activiteit.

Je gebruiksstatistieken in het FastComments dashboard volgen pubSubMessageCount en pubSubBandwidth zodat je de realtime-synchronisatie-activiteit over je sites kunt monitoren.

Synchronisatie tussen tabbladen

Als een gebruiker dezelfde pagina in meerdere browsertabbladen open heeft, verschijnen updates in het ene tabblad onmiddellijk in de andere tabbladen. Dit werkt via hetzelfde WebSocket-synchronisatiemechanisme en vereist geen extra configuratie.

Gebruikers kunnen je site ook op meerdere apparaten tegelijk open hebben en al deze apparaten blijven synchroon. Een marker die op een desktopcomputer is gemaakt, verschijnt direct op de tablet van de gebruiker als beide apparaten dezelfde afbeelding bekijken.

Beveiliging

WebSocket-berichten worden verzonden via beveiligde verbindingen (WSS) en bevatten tenant-validatie om ervoor te zorgen dat gebruikers alleen updates ontvangen voor gesprekken waarvoor ze geautoriseerd zijn. De server valideert alle bewerkingen voordat deze worden uitgezonden om ongeautoriseerde toegang of manipulatie te voorkomen.

Offline-gedrag

Wanneer gebruikers volledig offline zijn, kunnen ze bestaande markers nog bekijken maar kunnen ze geen nieuwe aanmaken of updates van anderen zien. De widget detecteert de offline-status en toont gepaste meldingen.

Als een gebruiker probeert een marker aan te maken terwijl hij offline is en daarna weer online komt, zal de bewerking mislukken in plaats van in de wachtrij te worden geplaatst, om gegevensconsistentie te waarborgen. Gebruikers moeten de bewerking opnieuw proberen zodra hun verbinding is hersteld.

Impact op prestaties

De WebSocket-verbinding heeft een minimale impact op de prestaties. De verbinding blijft inactief wanneer er geen updates plaatsvinden en verwerkt alleen berichten wanneer er activiteit is. Bij een typische afbeelding met matige marker-activiteit gebruikt de WebSocket minder CPU dan het renderen van de afbeelding zelf.

Voor pagina's met honderden gelijktijdige gebruikers en veel marker-aanmaakactiviteit schaalt het systeem horizontaal om de prestaties te behouden zonder individuele clientverbindingen te beïnvloeden.

Samenwerkingsscenario's

De realtime-synchronisatie maakt Image Chat bijzonder krachtig voor samenwerkingsworkflows. Ontwerpteams kunnen samen mockups beoordelen waarbij iedereen in realtime ziet waar markers worden geplaatst. Klantenserviceteams kunnen gezamenlijk screenshots annoteren om problemen te identificeren. Onderwijsgroepen kunnen diagrammen bespreken waarbij alle deelnemers elkaars markers zien terwijl ze worden gemaakt.

De directe feedback zorgt voor een meer betrokken en productieve samenwerkingservaring in vergelijking met traditionele reactiesystemen waarbij gebruikers moeten verversen om updates te zien.


Vragen?

Dat is alles voor FastComments Image Chat! Als je vragen hebt, hulp nodig hebt bij de implementatie, of suggesties voor functies, laat het ons dan hieronder weten of neem contact op met ons ondersteuningsteam.

Bekijk de live demo op onze demopagina om Image Chat in actie te zien.