Zalehlé ucho z vody dokáže pěkně potrápit. Existuje ale několik způsobů, jak se ho zbavit

29. 5. 2024

Sdílet

zalehlé ucho z vody
Autor: Depositphotos
zalehlé ucho z vody
Léto se blíží a s ním i doba polehávání na pláži a cachtání se ve vodě. Při koupání a vodních radovánkách však lehce může dojít k tomu, že se do ucha dostane voda. Odtud je jen krůček k zalehlému uchu. Společně si projdeme metody, jak uvolnit zalehlé ucho.

Ten pocit poznal snad každý. Vynoříte hlavu z vody a cítíte, že v něm zůstala voda. Člověku může připadat, jako by se mu tam přelévala. Tento stav je známý jako zalehlé ucho. Zalehlé ucho postihuje především plavce a týká se hlavně dětí. Důvod, proč dětem častěji zaléhají uši, je dán tím, že děti mívají užší zvukovody, a tedy z nich voda odtéká hůře. Jak na zalehlé ucho z vody vyzrát, se podíváme níže. [1, 23]

Co se dozvíte v článku
  1. Jak se zbavit vody v uchu? 
  2. Kdy zajít k doktorovi?
  3. Jak se řeší zánět zvukovodu z vody?
  4. První pomoc, když ucho bolí
  5. Jaké jsou další nejčastější důvody zalehnutí ucha?
  6. Jak se vyhnout zalehlému uchu?

Jak se zbavit vody v uchu? 

Obvykle voda z uší vyteče i bez nějakého zásahu, a to díky jejich struktuře a ušnímu mazu. Pokud se však potýkáte s uvízlou vodou v uchu už nějakou dobu a zajímá-li vás, co když voda v uchu nejde ven, dá se jí nejsnáze zbavit, jestliže budete následovat tyto kroky:

  • Zkuste naklonit hlavu se zalehlým uchem na stranu a lehce tahat za ušní lalůček v různých směrech. Taháním se zvukovod napne a ulehčí odtok vody. Možné je také v této poloze otáčet hlavou doleva a doprava. 
  • Rozpohybujte čelist zíváním či žvýkáním žvýkaček. Poté proveďte úkon popisovaný v prvním bodě. Pohybem úst lze totiž uvolnit tlak uvnitř ucha. 
  • Zhluboka se nadechněte, zacpěte si nos prsty, stiskněte rty k sobě a pomalu vydechněte. Tím by se měla uvolnit Eustachova trubice (spojující střední ucho s nosohltanem).
  • Položte se na bok a zalehlé ucho umístěte na ručník či polštář, gravitace by se měla postarat o zbytek. 
  • Přiložte dlaň k uchu. Následně se nakloňte se zalehlým uchem směrem dolů a současně střídavě tlačte a povolujte stisk dlaně. Podtlakem byste mohli docílit toho, že se voda uvolní. 
  • Co pomáhá na zalehlé ucho od vody, je také přiložit teplý obklad, případně ho vysušit teplým vzduchem z fénu nastaveného na nejnižší možný stupeň, přičemž fén držte v bezpečné vzdálenosti od ucha a pomalu s ním pohybujte dopředu a dozadu. 
  • Použijte spreje nebo ušní kapky obsahující peroxid vodíku (nedoporučuje se při ušní infekci či perforaci ušního bubínku). Roztok peroxidu vodíku si lze připravit i doma smícháním 3% peroxidu vodíku se stejným množstvím vody. 
  • Co na zalehlé ucho dále platí, je větší množství vody. Ač to zní paradoxně, nakapejte si vleže na boku pár kapek do zalehlého ucha pomocí kapátka, po cca 5 sekundách se otočte s uchem dolů a voda by skutečně měla vytéci. 
  • Pomoc při zalehlém uchu od vody poskytuje i pára. Stačí si dát horkou sprchu či inhalovat páru v misce, nad niž se nakloníte se zakrytou hlavou ručníkem, po dobu 5 až 10 minut.
  • Připravte si roztok z bílého octa a alkoholu v poměru 1 : 1 (nevhodné pro osoby s ušní infekcí, otevřenými ranami v uchu či prasklým bubínkem), po nakapání několika kapek do ucha po chvilce skloňte hlavu se zalehlým uchem k zemi a voda by se měla uvolnit.
  • Dalším způsobem, jak dostat vodu z ucha ven, je použít teplý olivový olej. Stačí nakapat pár kapek do ucha, čímž je zároveň možné zabránit infekci.

Co mnozí ve snaze dostat vodu z ucha ven dělají, ale rozhodně se to nedoporučuje, je vkládat do ucha jakýkoli předmět, včetně prstu nebo vatové tyčinky. Vodu byste tak mohli zatlačit hlouběji do ucha a poškodit tak bubínek či tenkou vrstvu kůže pokrývající zvukovod. 

Dle MUDr. Daniela Petra jsou nejvhodnějšími kroky k odstranění vody z ucha tyto: „Nakloňte hlavu na stranu a tahejte za ucho v různých směrech. Pokud to nefunguje, žvýkejte žvýkačku či zívejte. Pokud nic z toho nepomáhá, můžete zkusit vysušit zvukovod fénem, ale nastavte jej na nejnižší teplotu a výkon. Naopak se nesnažte vodu odstranit prstem či vatovými tyčinkami, mohli byste se poranit.“ [4, 5, 6, 7]

Trápí vás voda v uchu často?

Stáhněte si zdarma naši infografiku s doporučeními ohledně vody v uchu:

voda v uchu

Outstream Placeholder

Kdy zajít k doktorovi?

V případě, že vodu z ucha nelze dostat, může vést k zánětu zvukovodu. Ten vyvolávají bakterie, jež se v uchu mohou začít šířit poté, co voda z ucha sama nevyteče. Voda totiž vytváří vlhké prostředí, které je (spolu se škrábanci a drobnými oděrkami) pro množení se bakterií jako dělané. Známkou infekce může být i bolest, jež se dostavuje při zatahání za ušní lalůček.

Zánět zvukovodu se obvykle projevuje mírnými příznaky, které se ale s postupem času mohou horšit. Lékaři většinou rozdělují zánět zvukovodu podle stadia závažnosti na mírný, středně těžký a pokročilý. Poznat rozvíjející se zánět lze podle toho, že ucho bývá v daném místě zarudlé, bolí či svědí. Rovněž z něj může vytékat průhledná tekutina, která nijak nezapáchá. 

Při středním stadiu se svědění a bolest stupňují, zarudnutí se rozšiřuje a narůstá i množství výtoku z ucha. Dále zánět může doprovázet tlumený či zhoršený sluch a pocit plnosti uvnitř ucha. V posledním stadiu dochází k úplnému ucpání zvukovodu, otoku vnějšího ucha a dostavuje se i horečka a silná bolest vystřelující do obličeje či krku. 

Pokud zaznamenáte horečku či silnou bolest, je nejvyšší čas navštívit lékaře. Zajít k lékaři byste ale měli i s mírnými projevy nebo tehdy, jestliže voda zůstává v uchu již několik dnů, nebo dokonce týdnů. 

Dodejme, že rozdíl mezi plaveckým uchem, jiný název pro zánět zvukovodu, a jinými typy ušních infekcí spočívá kupříkladu v příčině. Zánět vnějšího zvukovodu způsobují vlivy vnějšího prostředí, zatímco k infekcím středního či vnitřního ucha dochází po nemocích, jako je chřipka, nachlazení, ale i alergie. [8, 9, 10, 11]

Jak se řeší zánět zvukovodu z vody?

Zánět zvukovodu z vody by se ideálně měl začít řešit co nejdříve, aby nedošlo k vážnějším komplikacím, jako je dočasná ztráta sluchu, chronická infekce, celulitida (infekce hlubokých tkání) či poškození kostí a chrupavek. Dlouhodobě zalehlé ucho se pokládá za chronický zánět. Chronický zánět zvukovodu znamená, že příznaky přetrvávají po dobu delší než 3 měsíce nebo se dostavují opakovaně v různých časových intervalech. 

Pokud se rozhodnete navštívit lékaře, obvykle provádí fyzikální vyšetření a všímá si zarudnutí a bubínku, jestli se jeví jako zanícený či oteklý. Prostřednictvím otoskopu může dále zjistit, jestli infekce nezasáhla také střední ucho. V případě výskytu hnisu se někdy přistupuje ke kultivaci ušního drénu, tedy odběru vzorku hnisu k vyšetření.

Existují různé způsoby léčby, přičemž záleží na závažnosti zánětu. Obvykle se ale přistupuje k důkladnému vyčištění a odvodnění zvukovodu odsáváním či ušní kyretou. V rámci domácí léčby mohou pomoci i teplé obklady přiložené k uchu. Pokud vás zajímá, jak dlouho trvá zalehlé ucho běžně vyléčit, většinou jde o 7 až 10 dnů. [12, 13, 14, 15]

První pomoc, když ucho bolí

MUDr. Daniel Petr za nejlepší první pomoc v případě zalehlého ucha pokládá: „Pokud nemáte kontraindikaci, pomohou vám běžně dostupná analgetika, jako je ibuprofen nebo paralen, která bez problémů koupíte v lékárně. Spěte s více polštáři pod hlavou a nesnažte se ucho vyčistit prstem či vatovým tamponem, mohli byste stav ještě zhoršit. Pokud bolest neodeznívá či se zhoršuje, vyhledejte lékařskou pomoc.“

Volně prodejné léky na bolest ucha

Zánět se obyčejně léčí nasazením volně prodejných léků proti bolesti, jako je paracetamol či ibuprofen. Pakliže nedojde ke změně ani za dva či tři dny, může lékař pacientovi předepsat antibiotika, která jsou často k dostání ve formě ušních kapek. Léčba jimi obvykle trvá 10 až 14 dnů. V méně častých případech je možné, že vám lékař doporučí lék na snížení otoku zvukovodu (kortikosteroidní kapky na zánět zvukovodu) či předepíše antibiotika užívaná perorálně. 

Borová voda do uší

Co na zánět zvukovodu dále zabírá, je borová voda. Někdy se pomocí ní provádí výplach či se jí odstraňují sekrety v uchu, a to tak, že se v jejím roztoku smočí tampon, kterým se následně lze sekretu zbavit. Ucho by se tímto způsobem mělo čistit opakovaně a vždy před použitím kapek, aby byl jejich účinek zachován. Mezi spíše babské rady se řadí léčba octovými kapkami, ty přispívají k navrácení přirozené bakteriální rovnováhy v uchu. [16, 17, 18, 19]

Jaké jsou další nejčastější důvody zalehnutí ucha?

Jak už bylo řečeno, zánět zvukovodu zapříčiňuje voda. Na vině však nemusí být jen ta. Vytékat z ucha mohou i jiné tekutiny, a to z nejrůznějších důvodů. Například jde o hnis. Ten bývá kalný a zbarvený do žlutavě bíla, zpravidla ho vyvolává infekce či prasklý ušní bubínek. Při infekci přitom někdy doprovází hnis nepříjemný zápach.  

Nejčastěji se však setkáte se zalehlým uchem v důsledku ušního mazu, odborně zvaného cerumen. Ten obsahuje odumřelou kůži, bakterie, olej, ale i uvízlou vodu či vlasy. Jeho úlohou je chránit ucho před zasažením nějakým předmětem či bakteriemi. Kvůli nadměrnému množství ušního mazu je však možné, že se ucho ucpe, což by mohlo ovlivnit sluch, proto je nejvhodnějším řešením navštívit lékaře, který ho odstraní. Zároveň jsou k zánětu náchylnější osoby s cukrovkou, jelikož jejich ušní maz může být zásaditější, než je běžné, což pro infekci představuje příznivější prostředí. 

Také se může jednat o výtok čiré tekutiny, jenž může být zapříčiněn prasklým ušním bubínkem, chronickým onemocněním, pooperačním stavem, kožními problémy (ekzém, lupénka, seboroická dermatitida) nebo zcela výjimečně únikem mozkomíšního moku. Kožní problémy většinou do několika dní odezní samy, zato v případě mozkomíšního moku je situace velmi vážná. Stává se tak po úrazu a je známkou poškození lebky, mozku či páteře, proto je třeba neprodleně vyhledat lékařskou pomoc.

Rovněž se lze setkat s krvavým výtokem, červeně zbarvená tekutina může být projevem poranění ušního bubínku, poškození vnitřního prostoru ucha vlivem nějakého předmětu, ale i příznakem úrazu hlavy, jiných zdravotních potíží (rakovina) nebo následkem užívání některých léků na ředění krve. [20, 21, 22]

Jak se vyhnout zalehlému uchu?

voda z ucha nejde ven

MUDr. Daniel Petr v rámci prevence zalehlého ucha doporučuje: „Při koupání lze používat plavecké špunty do uší nebo čepice. Pokud to jde, tak neponořujte uši do vody vůbec. Po plavání si důkladně vysušte zevní ucho ručníkem či jinou látkou, aby vám nenatekla voda do zvukovodu.“ Předcházet zalehlému uchu tedy jistým způsobem lze, jestliže se jedinec bude držet určitých zásad. Níže tato doporučení shrnujeme:

  • udržovat uši v suchu (důkladné osušení po koupání, ale jen vnějšího ucha),
  • neodstraňovat ušní maz,
  • nekoupat se v jezerech nebo rybnících při výskytu sinic,
  • otáčet hlavou ze strany na stranu za účelem usnadnit odtok vody,
  • před pobytem ve vodě a po něm si do ucha nalít v poměru 1 : 1 několik kapek alkoholu a bílého octa (alkohol vysouší vnitřní prostředí ucha a obě kapaliny přispívají ke zničení bakterií a rozkladu ušního mazu či jiných nánosů),
  • používání ušních špuntů či vodní čepice. [23, 24, 25]

Zdroje: healthyhearing.com, verywellhealth.com, mayoclinic.org, betterhealth.vic.gov.au, hopkinsmedicine.org, healthline.com, webmd.com, my.clevelandclinic.org, healthpartners.com, pediatriepropraxi.cz, medicalnewstoday.com 

'; 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'; } }
Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).
'; 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 »