Většina lidí se za problémy s inkontinencí stydí. Jaké jsou vhodné způsoby její léčby?

23. 1. 2019 8:30
5 nových názorů
Ilustrační obrázek
Autor: VitalikRadko – Depositphotos
Ilustrační obrázek
Inkontinence neboli samovolný únik moči trápí zhruba desetinu populace. Často bývá považována za problém starších žen, nevyhýbá se však ani mužům a dětem. Příčinou může být ochabnutí pánevního dna po porodu či při sedavém zaměstnání, u mužů signalizuje například problémy s prostatou. Většina pacientů se za inkontinenci stydí a nechtějí ji přiznat ani před svým lékařem. Díky včasné diagnóze a vhodné léčbě se ovšem problémy s únikem moči dají úspěšně řešit.


Močová inkontinence sama o sobě nemoc není. Často však naznačuje, že v těle něco není v pořádku a je potřeba navštívit lékaře. Toto onemocnění navíc může být příčinou hlubokých depresí a může mít také negativní vliv na partnerský i pracovní život postiženého.

Inkontinence u žen

V České republice inkontinencí trpí zhruba 1 milion lidí. Nejvíce ohroženou skupinou jsou starší lidé, ženy však bývají postiženy dvakrát častěji než muži. Důvodem může být například struktura ženského močového traktu, těhotenství, porod či menopauza.

Podle statistik se v dnešní době různé stupně tohoto onemocnění vyskytují až u 50 % žen nad 50 let. Problémy s inkontinencí ovšem neustále přibývají i u pacientek v mladších věkových skupinách. Důležité je vždy stanovit přesnou diagnózu a vhodnou léčbu, protože rozsah nedobrovolného úniku moči může být u každého jednotlivce odlišný.

Inkontinence u mužů

Nedobrovolný únik moči není pouze problémem starších žen, vyskytuje se také u mužů. Prevalence stoupá s věkem, nejčastěji postihuje pacienty starší než 65 let. Poměrně častá je inkontinence po operaci prostaty, mezi další příčiny úniku moči patří například onemocnění nervové (roztroušená skleróza) nebo také stav po cévní mozkové příhodě.

Inkontinence u dětí

Dětská inkontinence je obvykle opomíjená, lidé ji také často zaměňují za běžné pomočování. I pro děti však může znamenat velký problém, ještě v 15 letech trápí některý z typů inkontinence až 2 % mladistvých.

U dětí je únik moči nejčastěji spojený s poruchou dozrávání reflexů močení, na svědomí ho ovšem může mít i selhání činnosti zevního svěrače při kašli nebo fyzickém úsilí. Noční pomočování může mít různé příčiny, od poruchy produkce hormonů, přes poruchy spánku a psychické obtíže, až po skrytou formu hyperaktivního močového měchýře. Pro děti jsou také typické různé formy anatomické inkontinence.

Druhy inkontinence

Podle projevů můžeme rozlišovat několik různých typů inkontinence. Odlišné jsou nejen jejich symptomy, ale také způsob léčby.

Stresová inkontinence

Nejčastěji diagnostikovaným typem je inkontinence stresová. K úniku moči dochází v důsledku zvýšení tlaku v dutině břišní. Tento tlak vzniká kvůli stresu nebo námaze, může se projevit například při zakašlání, smíchu, kýchnutí, sportu či při zvedání těžkých břemen. Příčinou onemocnění je oslabený uzávěr močového měchýře.

Urgentní inkontinence

Druhým typem je inkontinence urgentní. V tomto případě úniku moči předchází náhlé a silné nucení běžet na záchod bez jakýchkoliv předchozích varovných signálů. Potíže může způsobovat hyperaktivní močový měchýř, který o sobě dává vědět i ve chvíli, kdy ještě zdaleka není plný.

Paradoxní inkontinence

Paradoxní inkontinenci lékaři říkají také inkontinence z přetékání nebo z přeplnění. K té dochází při přeplnění močového měchýře a následně se projevuje spontánním odkapáváním moči. Vyskytuje se například po radikálních gynekologických operacích nebo když nádor zcela utlačuje močovou trubici.

Reflexní inkontinence

Reflexní inkontinence vychází z poruchy v centrálním nervovém systému, jedná se o poruchu reflexu močení. Ke vzniku tohoto onemocnění může dojít při zlomeninách obratlů nebo v důsledku onemocnění nervu. Nejčastěji se projeví u pacientů se stařeckou demencí.

Psychogenní inkontinence

Tento druh úniku moči je spojený s pocitem úzkosti, strachu a stresu. Většinou se jedná o dočasnou poruchu, která se nejčastěji projevuje u starších pacientů.

Návalová inkontinence

Vyskytuje se většinou u starších mužů v důsledku onemocnění prostaty. Zbytnělá prostata totiž brání odchodu moči z těla.

Smíšená inkontinence

Jedná se o kombinaci stresového a urgentního úniku moči. Tento typ se vyskytuje zpravidla u žen.

Čím je inkontinence způsobena?

Příčiny inkontinence mohou být různé, většinou se na vzniku tohoto onemocnění podílí více faktorů najednou. Velmi často je za únik moči zodpovědná močová infekce či ochabnutí svalů pánevního dna.

Další příčiny:

Sestup pánevního dna, který je za potíže s únikem moči či s vyprazdňováním stolice také často zodpovědný, se může projevit pocitem tlaku, případně lze nahmatat malou bulku, která sestupuje z pochvy dolů. Pro ženu může mimo jiné znamenat potíže při chůzi či při pohlavním styku.

Stupně a příznaky inkontinence

Projevy se u tohoto onemocnění mohou lišit podle stupně inkontinence. Pokud se jedná o lehkou formu, moč uniká po kapkách jednou či dvakrát denně. Když dojde k úniku moči v rozsahu 100‒200 ml za 4 hodiny, lékaři hovoří o středním stupni inkontinence.

Za těžký stupeň inkontinence považujeme takový únik moči, který dotyčného trápí prakticky neustále. Typicky se vyskytuje u seniorů, kterým za 4 hodiny z těla unikne více než 200 ml moči. Tento problém navíc přetrvává i v průběhu noci.

Další možné projevy inkontinence:

  • Pálení a řezání při močení
  • Časté noční močení
  • Zápach
  • Podrážděná kůže a opruzeniny
  • Záněty

Jak inkontinenci léčit?

Léčba inkontinence závisí především na jejím druhu a stupni. Odvíjí se také od včasné a správné diagnózy. Lehký únik moči se většinou řeší pomocí speciálních cvičení, která se zaměřují na posilování svalů pánevního dna. Pro ženy v období klimakteria je vhodný také nehormonální doplněk stravy Ive InkontinStop, který pomáhá únik moči omezit.

Léčba stresové inkontinence

Co se týče stresové inkontinence, lehčí stádia se často léčí pomocí konzervativních postupů, kam patří rehabilitace, elektrostimulace nízkofrekvenčními impulsy, pesaroterapie či farmakologická terapie. Pokud tato léčba není dostatečně účinná, přistoupí se k operaci. V případě, že příčinou je porušení svěrače močové trubice, lze například implantovat umělý.

Standardním postupem při léčbě stresové inkontinence je také zavedení „pásky“ do okolí močové trubice, kde poskytuje podporu při zvyšování vnitrobřišního tlaku. Existuje několik různých druhů pásek, například TOT, TVT, TVT-O, Monarc či jiné.

Při lehké či střední formě se aplikuje také léčba inkontinence laserem. V takovém případě není nutná anestezie ani narkóza, výhodou je snížení zátěže pro organismus a rychlejší hojení.

Léčba urgentní inkontinence

V případě urgentní inkontinence se konzervativní léčba skládá především z úpravy životosprávy a fyzioterapie svalů pánevního dna, součástí je však také mikční dril neboli „močení podle hodinek“. Lékař dále může předepsat parasympatolytika, která se používají k uvolnění stěny močového měchýře a snížen frekvence močení.

Pokud ani jedna z metod není úspěšná, pacientovi může pomoci aplikace Botulotoxinu do stěny močového měchýře. Někdy ovšem ani tato léčba nestačí a v takovém případě je možné přistoupit i k operativnímu řešení. Jedná se o operace, které zvětší kapacitu měchýře (myektomie) či úplné odklonění moči z dolních močových cest. Tyto postupy jsou však nevratné.

Cvičení při inkontinenci

Pro posílení svalů pánevního dna je vhodné vyzkoušet Kegelovy cviky. Ty totiž pomáhají předcházet obtížím s únikem moči, jsou ale vhodné také ke zkvalitnění sexuálního života a pro ženy před porodem i po porodu. Důležité je pravidelné a dlouhodobé cvičení, výsledky se totiž často dostaví až po několika týdnech.

Bylinky na inkontinenci

Správnou funkci močového měchýře mohou podpořit například dýňová semínka, které ve formě tablet seženete v lékárně. Mezi další doporučené prostředky patří brusinky v jakékoliv podobě, čaj z kokošky pastuší tobolky či lichořeřišnice.

Inkontinence a prevence

Předcházet vzniku inkontinence lze například díky výše zmíněným cvikům na posílení pánevního dna, ale také díky dodržování zdravého životního stylu. Důležité jsou také pravidelné gynekologické prohlídky a konzultace s lékařem v případě jakýchkoliv obtíží.

Inkontinenční pomůcky

Pacientům, kteří trpí nežádoucím únikem moči, mohou zjednodušit život speciální inkontinenční pomůcky. Ty jsou v dnešní době velmi diskrétní, přizpůsobují se tvaru těla a pod oblečením nevydávají žádné nežádoucí zvuky. Postiženým navíc přináší pocit jistoty a bezpečí. Výběr pomůcek závisí na stupni inkontinence.

  • Inkontinenční vložky – dostupné ve variantě pro ženy i pro muže
  • Inkontinenční kalhotky – vhodné na noc či u větších úniků moči, existují i v pánské verzi
  • Inkontinenční pleny – vhodné při větším úniku moči, mají větší absorpční schopnost než vložky
  • Inkontinenční hygienické pomůcky – šetrné kosmetické přípravky, jako například čisticí pěny, emulze a různé krémy
  • Inkontinenční podložky – k ochraně matrace a postele

S úhradou inkontinenčních pomůcek, jako jsou vložky, pleny, kalhotky či podložky, vám může pomoci i zdravotní pojišťovna. Pokud se u pacienta inkontinence prokáže, lékař může předepsat poukaz, který mu zajistí pomůcky maximálně na tři měsíce. Pokud je však zakoupíte individuálně, pojišťovna je bohužel neproplatí.

Inkontinence v těhotenství a po porodu

U žen často dochází k úniku moči v průběhu těhotenství, protože je zvláště zatěžována oblast jejich pánevního dna. Po porodu je inkontinence způsobena těhotenskými změnami tkání a vzniklým otokem. Většinou by se po zahojení měla situace vrátit do normálu, pokud však tento stav přetrvává déle než půl roku, je vhodné konzultovat situaci s lékařem.

Fekální inkontinence

Ačkoli je močová inkontinence poměrně známý a běžný problém, o fekální inkontinenci většina lidí pravděpodobně neslyšela. Jedná se o ztrátu kontroly nad vyprazdňováním stolice a následný nedobrovolný únik stolice. Tento problém trápí zhruba 2 % dospělých a v jeho důsledku se lidé často straní společnosti a vyskytují se u nich psychické problémy.

Inkontinence stolice je spojená s nesprávnou funkcí análního svěrače. Člověka může postihnout v jakémkoliv věku, nejčastěji se však objevuje ve stáří. K rizikovým skupinám patří ženy po porodu, lidé po úrazech či ozařování a také pacienti s neinfekčními střevními záněty. Léčba spočívá v posilování svalů pánevního dna a v nácviku vyprazdňování.

Zdena (neregistrovaný)
Dobrý den, skvěle shrnutý článek, zrovna tento problém řeším a nedávno jsem narazila na tuto ordinaci: http://www.urogynekologie-otcenasek.cz/inkontinence/ máte s nimi prosím někdo zkušenost?
Drahoslav (neregistrovaný)
Jestli potřebujete víc informací o léčbě prostaty, určitě si přečtěte tento článek. https://prostata.regen50-nutrilago.cz/nejlepsi-leky-na-prostatu-bez-predpisu-2020/ Jsou tam i opravdu zajímavé věci, které jsem předtím nevěděl
aneta lonska (neregistrovaný)
Dobrý den. Já měla podobné problémy a pomohli mi na této klinice http://www.labioplastika-praha.cz/ Moc doporučuji.
Helena Makoova (neregistrovaný)
Dobrý deň ,chcela by som sa informovať o prášku Detonic či je vhodný na únik moču. Časté močenie.A chcela by som vedieť dávkovanie .Neviem sa to nikde dočítať.Ďakujem
Redakce Zdraví.Euro.cz (neregistrovaný)
Dobrý den, paní Makoová, Detonic je pouze potravinový doplněk, k léčbě inkontinence navštivte svého gynekologa. V Česku se nejčastěji k léčbě inkontinence používají Spasmed nebo Vesicare. Redakce Zdraví.euro.cz
  • 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 »