Vyrážku způsobují alergie, viry i plísně. Jak je rozpoznat?

16. 5. 2023 7:30
přidejte názor
ručitel
MUDr. Daniel Petr | Odborný garant článku
„Objasnit příčinu vyrážky může být někdy obtížné. V případě celkových příznaků je lepší vyhledat lékaře.“

Vyrážky mohou mít nejrůznější příčiny, od kousnutí hmyzem, alergie nebo planých neštovic až po závažné bakteriální infekce. Podle toho, co vyrážku způsobuje, se pak dané obtíže liší také svým vzhledem a doprovodnými příznaky. Jak rozpoznat jednotlivé původce vyrážky a jak je léčit?

Co je kožní vyrážka?

Co se dozvíte v článku
  1. Co je kožní vyrážka?
  2. Citlivé reakce a alergické vyrážky na těle
  3. Plísňové vyrážky
  4. Dětské nemoci s vyrážkou
  5. Virová vyrážka u dospělých
  6. Bakteriální infekce způsobující vyrážku
  7. Jak vyrážku léčit?
  8. Kdy vyhledat lékaře?

Vyrážka je pojem, který označuje podrážděnou nebo oteklou část kůže na lidském těle. Obecněji řečeno se jedná o výsev kožních projevů, které mohou být příznakem nějakého onemocnění. Vyrážky mohou být svědivé i bolestivé a mohou je doprovázet další tělesné příznaky, jako je například zvýšená teplota, zatímco některé se objevují bez dalších obtíží. Vyrážky se také zpravidla liší svým vzhledem.

Některé vyrážky jsou narůžovělé, jiné červené a další bývají dokonce bílé. Mohou přitom být suché, vlhké, hladké, hrbolaté, popraskané či puchýřovité. Vyrážka se pak může objevit po celém těle, nebo postihuje pouze jednu část těla.

Jak sami vidíte, vyrážka může mít mnoho podob. Navíc se objevuje z mnoha různých důvodů, kam patří alergie, infekce či léky. Někdy pak bývají vyrážky jedním z příznaků virových, bakteriálních čí plísňových chorob nebo jiných onemocnění. Původce vyrážky proto není tak jednoduché identifikovat. [1, 23]

Citlivé reakce a alergické vyrážky na těle

Alergické a citlivé reakce na různé látky, podobně jako autoimunitní onemocnění kůže, jsou velmi častými původci kožních vyrážek. Níže si představíme nejčastější typy.

Alergická kontaktní dermatitida: vyrážka s puchýřky

Alergická kontaktní dermatitida se objevuje, když kůže reaguje na něco, s čím přišla do kontaktu. Lidé bývají nejčastěji alergičtí na konzervační látky, nikl, který se používá na výrobu bižuterie (například vyrážka na krku od řetízku), nebo jedovaté rostliny, jako je například břečťan. Kontaktní alergickou dermatitidu mohou ale vyvolat také některé léky, například různé mastiAlergická vyrážka se pak může objevit po požití medikamentů.

Mezi další dráždivé prostředky řadíme různá mýdla a čisticí prostředky. Tato vyrážka se může objevit klidně až několik dní po kontaktu s danou látkou, proto může být obtížné ji identifikovat. Kontaktní dermatitida se obvykle projevuje svědivou, červenou a oteklou kůží, často s puchýři naplněnými tekutinou. Pokožka se může také zanítit a mokvat.

Vyrážka ze slunce

Pokud se u vás objeví vyrážka poté, co jste byli vystaveni slunečnímu záření, můžete trpět alergií na slunce. Mírná sluneční alergie obvykle vymizí bez nutnosti léčby a může se u vás projevit pouze dočasně.

Pokud trpíte vyrážkou ze sluníčka, měli byste nosit oblečení, které vás před ním ochrání. Dále je důležité zmínit, že užívání některých léků, například určitých antibiotik (například doxycyklin), může vyvolat fotosenzitivní reakci, která vypadá jako popálení od slunce. Pokud užíváte jakékoli léky, ujistěte se, že můžete chodit na sluníčko.

Kopřivka: kožní vyrážka ze stresu i bodnutí hmyzem

Kopřivka způsobuje vyvýšené červené kožní plochy. Nejčastěji se objevuje jako doprovodný příznak alergické reakce na vzdušné alergeny nebo po bodnutí hmyzem. Vyvolat ji ale mohou i pouhé změny teplot, stres a někdy dokonce i bakteriální infekce.

Ekzém: silně svědivá vyrážka

Nejběžnější formou ekzému je atopická dermatitida. Často se rozvíjí již v dětství a má tendenci se zlepšovat s přibývajícím věkem. Velkou roli zde tedy hrají geny. K ekzému také mají často sklony lidé, kteří trpí astmatem a alergiemi. Atopický ekzém může způsobit červené vyvýšené skvrny podobně jako kopřivka, nicméně ekzém zpravidla velmi intenzivně svědí.

Psoriáza: šupinatá vyrážka

Psoriáza neboli lupénka označuje autoimunitní kožní poruchu, která jedince provází celý život. Vyrážka se často tvoří na loktech, kolenou, dolní části zad, pokožce hlavy (lupénka ve vlasech) a genitáliích (například vyrážka na penisu) a způsobuje tlustou, šupinatou kůži.

Trápí vás někdy vyrážka?

Seboroická dermatitida: vyrážka na obličeji a hlavě

Seboroická dermatitida, zkráceně seborea, je chronické kožní onemocnění, které se obvykle vyskytuje v mastnějších oblastech obličeje, hlavy, hrudníku a horní části zad. Jde o poměrně častou vyrážku, která údajně postihuje asi 12 % populace a 70 % kojenců v prvních třech měsících života. Typickým příznakem seborey je zarudnutí pokožky a odlupující se žlutavé šupinky. [4, 5, 6, 7, 8, 9]

Plísňové vyrážky

Kožní vyrážky, které jsou způsobeny plísní, se s největší pravděpodobností vyvinou ve vlhkých oblastech těla, jako jsou nohy nebo podpaží. Některé plísňové infekce nejsou nakažlivé a rovněž tyto infekce obvykle nejsou životu nebezpečné. Mezi nejběžnější patří:

  • Atletická noha: tato vyrážka na nohou se projevuje svěděním, štípáním a pálením mezi prsty na nohou a na chodidlech. Objevit se mohou také puchýře a suchá kůže.
  • Dermatofytóza: je to skupina onemocnění vyvolaná dermatofyty. Klinický nález je v tomto případě pestrý. Léze způsobená touto infekcí může připomínat červa ve tvaru prstenu a může se objevit na těle nebo na hlavě. Vyrážka postihuje nejen lidi, ale také zvířata. Typicky se projevuje šupinatými skvrnami, které jsou červené, hnědé nebo šedé. Pokožka obvykle svědí. [10, 11, 12]
Potničky trápí hlavně miminka a další malé pacienty. Jak je správně léčit?
Přečtěte si také:

Potničky trápí hlavně miminka a další malé pacienty. Jak je správně léčit?

Dětské nemoci s vyrážkou

Různá kožní onemocnění mohou postihnout jak kojence a batolata, tak starší děti a dospívající. Kožní onemocnění u dětí může zahrnovat běžné vyrážky, jako je kopřivka, plenková dermatitida nebo některé z výše uvedených. Kromě toho ale vyrážka u dětí často bývá doprovodným příznakem některého z dětských virových onemocnění. Zpravidla je doprovází také horečka a další nespecifické příznaky. Mezi ty nejběžnější patří:

  • Plané neštovice: vyrážka se objevuje nejprve na obličeji, na hrudníku a zádech a poté se šíří na zbytek těla. Pro vyrážku jsou typické svědivé puchýřky naplněné tekutinou.
  • Pátá nemoc: způsobuje jasně červenou vyrážku na tvářích.
  • Šestá nemoc: onemocnění se typicky projevuje horečkou, která trvá týden, a obvykle až později se objeví skvrnitá růžová vyrážka na hrudi.
  • Sedmá nemoc: tato choroba je známá také jako syndrom ruka, noha, ústa, jelikož způsobuje vyrážku kolem úst, na dlaních a chodidlech.
  • Spalničky: spalničky jsou vysoce nakažlivé, ale dnes jsou již součástí povinného očkování. Obvykle se vyrážka objevuje nejprve kolem úst a za ušima jako ploché červené skvrny.
  • Zarděnky: zarděnky jsou rovněž součástí povinného očkování. Způsobují růžovou nebo červenou vyrážku, která začíná na obličeji a krku.
  • Spála: jedná se o infekční onemocnění způsobené streptokokem (Streptococcus pyogenes). V podstatě jde o angínu doprovázenou malinově rudým jazykem a jasně červenou vyrážkou, která se může objevit po celém těle. [13, 14, 15]

Virová vyrážka u dospělých

Virové vyrážky jsou vyvolány nějakým virem, který pronikl do organismu, a mohou se lišit nejen vzhledem, ale také závažností. Virové vyrážky jsou typické zejména pro výše zmíněné dětské nemoci, ale mohou postihnout i dospělého člověka.

Pásový opar

Typickým příkladem virového onemocnění s vyrážkou je pásový opar, který bývá bolestivý, svědivý a může vyvolávat pocit mravenčení. Má tendenci objevovat se na trupu a postupuje pouze po jedné straně těla, zpravidla kolem žebra a na jedné části obličeje.

Tento typ vyrážky je velmi specifický, proto je obvykle jednoduché ji diagnostikovat. Pásový opar se může objevit u lidí, kteří již měli plané neštovice. Ohroženi jsou zvláště jedinci starší 50 let a osoby s oslabeným imunitním systémem. [16, 17, 18]

Alergie na alkohol je na rozdíl od intolerance velice vzácná. Jak tyto stavy spolehlivě rozeznat?
Přečtěte si také:

Alergie na alkohol je na rozdíl od intolerance velice vzácná. Jak tyto stavy spolehlivě rozeznat?

Bakteriální infekce způsobující vyrážku

Bakteriální infekce kůže se zpravidla nejprve projevují jako malé hrbolky, které se postupně zvětšují a mohou začít hnisat. Zatímco některé bakteriální infekce jsou mírné a snadno se léčí lokálními antibiotiky, jiné jsou závažnější a mohou vyžadovat léčbu i perorálními antibiotiky. Někdy, například při obávané meningokokové meningitidě (která se mimo jiné projevuje vyrážkou), je nutná hospitalizace a léčba intravenózními antibiotiky.

Bakteriální infekce může postihnout pouze jednu oblast, nebo dokonce celý povrch těla. Bakteriální kožní infekce vznikají tehdy, dostanou-li se bakterie do kůže přes malé praskliny, například v důsledku poranění či popálenin.

Mezi bakteriální infekce vyvolávající vyrážku patří například impetigo či Hensenova nemoc, tedy lepra, nebo také meningitida, která se projevuje nepravidelnými fialovými a červenými skvrnami. Tyto skvrny zpravidla nezmizí ani po zatlačení sklenicí a vyžadují neprodlenou léčbu. [19, 20, 21]

Jak vyrážku léčit?

Jelikož vyrážka může mít mnoho příčin a různé projevy, léčba bude záviset na tom, co ji způsobilo. Vyrážky způsobené virovým onemocněním zpravidla odezní samy za několik dní bez nutnosti léčby, jakmile se organismus vypořádá s virem.

Bakteriální infekce se obvykle léčí lokálními nebo perorálními antibiotiky, zatímco plísňové infekce je možné řešit volně dostupnými antimykotickými produkty, jako jsou masti, krémy či spreje. Kopřivku a jiné svědivé vyrážky lze zklidnit pomocí antihistaminik, tedy léků na alergii.

V případě, že se vyrážka po užití volně prodejných prostředků nezlepší, může vám kožní lékař předepsat účinnější léčivé krémy, případně protizánětlivé léky. Pokud vyrážka způsobuje bolest, může dočasně pomoci paracetamol či ibuprofen k utlumení obtíží, nicméně tyto léky nepomohou s léčbou samotné vyrážky. [22, 23, 24]

Kdy vyhledat lékaře?

Lékaře byste měli navštívit, pokud se vyrážka nezmírní po použití volně prodejných produktů, objeví-li se další znepokojivé příznaky, jež vyrážku doprovázejí, a také pokud máte podezření, že je vyrážka projevem nějakého onemocnění. Návštěvu lékaře byste neměli odkládat zejména tehdy, objeví-li se následující:

  • zvyšující se bolest nebo změna barvy vyrážky,
  • otoky obličeje nebo končetin,
  • horečka nad 38 °C,
  • potíže s dýcháním,
  • silná bolest hlavy nebo krku,
  • opakované zvracení nebo průjem,
  • bolest kloubů,
  • červené, fialové nebo tmavé pruhy v blízkosti vyrážky,
  • citlivé oblasti poblíž vyrážky,
  • zažili jste nedávné kousnutí klíštětem nebo zvířetem. [25, 26, 27]

Zdroje: mayoclinic.com, msdmanuals.com, healthline.com, my.clevelandclinic.org, medicalnewstoday.com, everydayhealth.com, cpzp.cz, bioliek.sk, webmd.com, forefrontdermatology.com, nhsinform.scot,

  • Žádné názory
  • Našli jste v článku chybu?
'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
'; document.getElementById('outstream-iframe').onload = function () { setupIframe(); } replayScreen = document.getElementById('iinfoOutstreamReplay'); iinfoOutstreamPosition = document.getElementById('iinfoOutstreamPosition'); outstreamContainer = document.getElementsByClassName('outstream-container')[0]; setupReplayScreen(); } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); outstreamDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; videoContent = outstreamDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; if ( location.href.indexOf('rejstriky.finance.cz') !== -1 || location.href.indexOf('finance-rejstrik') !== -1 || location.href.indexOf('firmy.euro.cz') !== -1 || location.href.indexOf('euro-rejstrik') !== -1 || location.href.indexOf('/rejstrik/') !== -1 || location.href.indexOf('/rejstrik-firem/') !== -1) { outstreamDirectPlayed = true; soundAllowed = true; iinfoVastUrlIndex = 0; } if (!outstreamDirectPlayed) { console.log('OUTSTREAM direct'); setUpIMA(true); } else { if (soundAllowed) { const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { console.log('OUTSTREAM sound forbidden'); renderBanner(); }); } } else { renderBanner(); } } } function getWrapper() { let articleWrapper = document.querySelector('.rs-outstream-placeholder'); // Outstream Placeholder from RedSys manipulation if (articleWrapper && articleWrapper.style.display !== 'block') { articleWrapper.innerHTML = ""; articleWrapper.style.display = 'block'; } // Don't render OutStream on homepages if (articleWrapper === null) { if (document.querySelector('body.p-index')) { return null; } } if (articleWrapper === null) { articleWrapper = document.getElementById('iinfo-outstream'); } if (articleWrapper === null) { articleWrapper = document.querySelector('.layout-main__content .detail__article p:nth-of-type(6)'); } if (articleWrapper === null) { // Euro, Autobible, Zdravi articleWrapper = document.querySelector('.o-article .o-article__text p:nth-of-type(6)'); } if (articleWrapper === null) { articleWrapper = document.getElementById('sidebar'); } if (!articleWrapper) { console.error("Outstream wrapper of article was not found."); } return articleWrapper; } function setupDimensions() { outstreamWidth = Math.min(iinfoOutstreamPosition.offsetWidth, 480); outstreamHeight = Math.min(iinfoOutstreamPosition.offsetHeight, 320); } /** * Sets up IMA ad display container, ads loader, and makes an ad request. */ function setUpIMA(direct) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (direct) { adsRequest.adTagUrl = directVast; console.log('Outstream DIRECT CAMPAING advert: ' + directVast); videoContent.muted = true; videoContent.volume = 0; outstreamDirectPlayed = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = outstreamWidth; // adsRequest.linearAdSlotHeight = outstreamHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function setupReplayScreen() { replayScreen.addEventListener('click', function () { iinfoOutstreamPosition.remove(); iinfoVastUrlIndex = 0; outstreamInit(); }); } /** * Sets the 'adContainer' div as the IMA ad display container. */ function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. outstreamDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( outstreamDocument.getElementById('adContainer'), videoContent); } function unmuteAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } } /** * Loads the video content and initializes IMA ad playback. */ function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(outstreamWidth, outstreamHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } /** * Handles the ad manager loading and sets ad event listeners. * @param { !google.ima.AdsManagerLoadedEvent } adsManagerLoadedEvent */ function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } /** * Handles actions taken in response to ad events. * @param { !google.ima.AdEvent } adEvent */ function onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Outstream event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: // This is the first event sent for an ad - it is possible to // determine whether the ad is a video ad or an overlay. if (!ad.isLinear()) { // Position AdDisplayContainer correctly for overlay. // Use ad.width and ad.height. videoContent.play(); } outstreamDocument.getElementById('adContainer').style.width = '100%'; outstreamDocument.getElementById('adContainer').style.maxWidth = '640px'; outstreamDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); // This event indicates the ad has started - the video player // can adjust the UI, for example display a pause button and // remaining time. if (ad.isLinear()) { // For a linear ad, a timer can be started to poll for // the remaining time. intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstreamLastError === 303) { if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } } break; case google.ima.AdEvent.Type.COMPLETE: // This event indicates the ad has finished - the video player // can perform appropriate UI actions, such as removing the timer for // remaining time detection. if (ad.isLinear()) { clearInterval(intervalTimer); } if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } break; } } /** * Handles ad errors. * @param { !google.ima.AdErrorEvent } adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstreamLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { renderBanner(); } } function renderBanner() { if (isBanner) { console.log('Outstream: Render Banner'); iinfoOutstreamPosition.innerHTML = ""; iinfoOutstreamPosition.style.height = "330px"; iinfoOutstreamPosition.appendChild(bannerDiv); } else { console.log('Outstream: Banner is not set'); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoOutstreamPosition.remove(); outstreamInit(); } else { return false; } adVolume = 1; return true; } /** * Pauses video content and sets up ad UI. */ function onContentPauseRequested() { videoContent.pause(); // This function is where you should setup UI for showing ads (for example, // display ad timer countdown, disable seeking and more.) // setupUIForAds(); } /** * Resumes video content and removes ad UI. */ function onContentResumeRequested() { videoContent.play(); // This function is where you should ensure that your UI is ready // to play content. It is the responsibility of the Publisher to // implement this function when necessary. // setupUIForContent(); } function onActiveView() { if (outstreamContainer) { const containerOffset = outstreamContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstreamPaused) { adsManager.resume(); outstreamPaused = false; } return true; } else { if (!outstreamPaused) { adsManager.pause(); outstreamPaused = true; } } } return false; } let outstreamInitInterval; if (typeof cpexPackage !== "undefined") { outstreamInitInterval = setInterval(tryToInitializeOutstream, 100); } else { const wrapper = getWrapper(); if (wrapper) { let outstreamInitialized = false; window.addEventListener('scroll', () => { if (!outstreamInitialized) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { outstreamInit(); outstreamInitialized = true; } } }); } } function tryToInitializeOutstream() { const wrapper = getWrapper(); if (wrapper) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstreamInitInterval); outstreamInit(); } } } else { clearInterval(outstreamInitInterval); } } }
OSZAR »