Ledvinová kolika má na svědomí silné bolesti zad a podbřišku. Jak ji léčit?

22. 9. 2021 7:30
přidejte názor
Autor: Shutterstock
ručitel
MUDr. Daniel Petr | Odborný garant článku
„Ledvinová kolika vás bezpochyby přivede do rukou lékaře. Bolest je to nesnesitelná.“

Trápí vás nesnesitelné bolesti, které se šíří z bederní krajiny do oblasti břicha či do genitálií? Pak se u vás s největší pravděpodobností rozvinula ledvinová kolika, která bývá nejčastěji spojována s přítomností močových kamenů. Vzhledem k tomu, že tyto komplikace mohou způsobit nevratné poškození ledvin a močového ústrojí, je nutné co nejrychleji přistoupit k vhodné léčbě.

Co je ledvinová kolika?

Co se dozvíte v článku
  1. Co je ledvinová kolika?
  2. Příčiny ledvinové koliky
  3. Jaké má ledvinová kolika příznaky?
  4. Možné komplikace
  5. Diagnostika
  6. Léčba ledvinové koliky

Jako ledvinová či renální kolika se označuje nepříjemný a velice bolestivý stav, za jehož rozvojem stojí porucha odtoku moči z těla. Jedná se většinou o bolest proměnlivé intenzity, která se šíří z dolní části zad do podbřišku, do boku a genitálií, ale může zasahovat i další části těla. Kromě toho se však objevuje i celá řada dalších příznaků, které mohou pacientovi výrazně znepříjemnit život.

Každý, kdo někdy problémy způsobené ledvinovou kolikou řešil, vám potvrdí, že bolest přicházející ve vlnách patří mezi to nejhorší, co kdy zažil. Zatímco ženy často přirovnávají tento stav k porodním bolestem, muži zase velmi silně vnímají situace, kdy bolest vystřeluje až do varlat. V každém případě je nutné ledvinovou koliku co nejrychleji řešit, protože jinak může způsobit vážné poškození ledvin.

Příčiny ledvinové koliky

Bolestivý stav, který lékaři nazývají ledvinová kolika, může mít svůj původ přímo v ledvině, ale také v močových cestách. Bývá způsoben obstrukcí, která brání normálnímu odtoku moči z těla. Nejčastěji je přitom za rozvoj obtíží zodpovědná urolitiáza, což je odborné označení pro přítomnost kamenů v močových cestách (často ledvinových kamenů).

Močové kameny se mohou objevit v jakékoliv části močového ústrojí, ale nejčastěji se tvoří v ledvinách, v močovodech a v močovém měchýři. Jedná se o tvrdé útvary vznikající ze solí a minerálů, které jsou za normální situace rozpustné v moči. Vlivem různých faktorů ovšem může docházet k jejich krystalizaci, což způsobí proměnu na nerozpustný konkrement.

Jak předejít problémům s ledvinami? Poslechněte si podcast s nefroložkou:

Drobné kameny často odejdou spolu s močí, ale pokud se jedná o větší konkrementy, mohou ucpat močové cesty a zastavit tak odtok moči z těla. Svalovina močového traktu se tím pádem začne reflexivně stahovat a uvolňovat, aby se překážka uvolnila. To následně vede k rozvoji nepříjemných projevů ledvinové koliky, která postihuje muže zhruba 2krát až 3krát častěji než ženy.

A co způsobuje vznik močových kamenů? Na vině může být třeba nízký příjem tekutin v kombinaci se změnami pH moči a s nedostatkem látek, které rozpouštějí jednotlivé minerály. Mezi další rizikové faktory patří zvýšené vylučování kamenotvorných látek, infekce močových cest, strava, obezita, zvětšená prostata, dědičnost, porucha vstřebávání vápníku, sedavé zaměstnání, nedostatek pohybu, užívání některých léků či vysoký krevní tlak.

Další možné příčiny obstrukce:

  • pasáž hnisu (pyelonefritida),
  • pasáž krevní sraženiny při hematurii (nález krve v moči),
  • pasáž nádorových či nekrotických hmot (tuberkulóza, nekrotizující papilitida).

Jaké má ledvinová kolika příznaky?

Kolika ledvin se nejčastěji projevuje prudkou bolestí, která přichází ve vlnách. Mezi jednotlivými záchvaty bolesti dochází k jejímu utlumení nebo dokonce k vymizení příznaků, což je dáno periodickými stahy a uvolňováním močových cest nad překážkou, ale později se obtíže vrací a mohou dokonce nabírat na síle.

Bolest se přitom obvykle šíří z bederní krajiny do podbřišku nebo do oblasti genitálií, ale může zasahovat i další místa. Je-li na vině tvorba močových kamenů, její intenzita vždy závisí na velikosti konkrementů a na tom, kde konkrétně se nachází. Podle toho pak lékaři rozlišují, zda se jedná o levostrannou koliku, nebo jde o pravostrannou koliku.

Pokud má ledvinová kolika původ v horní části močových cest, bolest podbřišku většinou vystřeluje do boku a do zad. Je-li naopak původ problému lokalizovaný v dolní části močových cest, bolest spodní části podbřišku, která má proměnlivou intenzitu, může zasahovat až do třísla, mediální plochy stehna, šourku nebo stydkých pysků.

Co se týče toho, jak dlouho trvá ledvinová kolika, jednotlivé záchvaty bolesti většinou pacienta trápí po dobu 20 až 60 minut, ale tento údaj je samozřejmě značně individuální. Poté nepříjemné pocity alespoň částečně odezní, ale to jen do té doby, než přijde další vlna. Renální kolika navíc bývá doprovázena i celou řadou jiných symptomů.

Další možné příznaky:

  • pocení,
  • nevolnost a zvracení,
  • střevní neprůchodnost (paralytický ileus),
  • motorický neklid a hledání úlevové polohy,
  • hematurie (přítomnost erytrocytů v moči),
  • polakisurie (časté nucení na močení),
  • zkalená a zapáchající moč,
  • bolest, řezání nebo pálení při močení,
  • časté nebo naopak nedostatečné močení,
  • příznaky infekce (horečky, zimnice).

Možné komplikace

Hromadění moči nad překážkou může vést k útlaku ledvinové tkáně, což se odborně označuje jako hydronefróza. Později dochází k nevratnému poškození a hrozí zde také rozvoj nekrózy. Pokud moč správně neodtéká, může se snadno infikovat bakteriemi, což poté vyústí v zánět ledviny. Mezi další možné komplikace se pak řadí sepse nebo selhání ledvin.

Měli jste někdy ledvinovou koliku?

Diagnostika

K lékaři by měl člověk vyrazit ve chvíli, kdy začne pociťovat nepříjemné bolesti břicha nebo problémy s močením, které jsou dlouhodobé. A nemusí se jednat o nijak výrazné obtíže, ale stačí mírné pobolívání v bedrech a podbřišku. Močové kameny se totiž tvoří postupně a jejich růst souvisí s celou řadou různých faktorů.

Vyhledat lékařskou pomoc byste ale měli i v případě, že dojde ke kompletní zástavě močení, objeví se nekontrolovatelné zvracení a horečka stoupne nad 38 °C. Lidé, kteří mají s tím, jak probíhá ledvinová kolika, zkušenosti, obvykle radí kontaktovat lékaře hned při první známce jakýchkoliv obtíží. Jen tak je možné předcházet rozvoji dalších zdravotních komplikací.

V rámci diagnostiky bude lékaře zajímat anamnéza pacienta a klinické projevy, s nimiž se potýká. Následovat bude fyzikální vyšetření, prostřednictvím kterého se zkoumá palpační bolestivost v oblasti průběhu močovodů a další faktory značící ledvinovou koliku. Dále se pak provádí vyšetření moči a rentgen břicha, pomocí kterého je někdy možné močový kámen spatřit.

Kromě toho pak svou roli hraje i ultrazvukové vyšetření, které v určitých případech dokáže odhalit rozšířený močovod nad místem uzávěru nebo rozšířenou ledvinnou pánvičku. Poté lékaři mohou provést nativní CT ledvin (při pozitivním nálezu na USG) či nativní nefrogram. Méně se pak využívají zobrazovací metody, jako je vylučovací urografie či ascendentní/antegrádní ureteropyelografie.

V rámci diferenciální diagnostiky se lékaři snaží odlišit ledvinovou koliku od jiných problémů, které se mohou na první pohled projevovat podobnými či stejnými symptomy. Sem patří třeba náhlá příhoda břišní (ileus, apendicitida, žlučníková kolika), adnexitida (zánět vejcovodů a vaječníků) nebo akutní pyelonefritida (infekce močových cest).

Léčba ledvinové koliky

Pacienti se často ptají, jakou vyžaduje ledvinová kolika léčbu a zda je nutné později dodržovat nějaká opatření, aby se problémy nevrátily. Cílem terapie je v tomto případě uvolnit obstrukci v odtoku moči a lékaři dbají také na zachování morfologie a standardní funkce ledvin i močových cest. Péče o pacienta přitom spadá do kompetencí urologa.

Konzervativní léčba

Při léčbě ledvinové koliky se uplatňují především léky, které přinášejí bezprostřední úlevu od bolesti, spazmů, nevolnosti a zvracení, ale také postupy, jejichž cílem je odstranit močové kameny a celkově zdravotní problém vyřešit. Mezi používané medikamenty se řadí například:

  • spasmolytika (léky uvolňující stahy svaloviny),
  • nesteroidní antiflogistika (například diclofenac),
  • α-blokátory (tamsolusin),
  • analgetika (léky proti bolesti),
  • infuze na zavodnění organismu.

Odstranění močových kamenů

Většina drobnějších močových kamenů projde močovým ústrojím bez větších obtíží, takže se jich pacienti dokáží zbavit bez chirurgického zákroku. K tomu obvykle stačí dodržovat pokyny lékaře, konzumovat dostatečné množství tekutin a užívat doporučené léky. Pokud se ovšem močový kámen nepodaří tímto způsobem uvolnit, je nutné ho odstranit jinak.

Jednou ze základních metod užívaných k odstranění močových kamenů je ureterorenoskopie (ureteroskopická extrakce litiázy), což je chirurgický výkon prováděný v celkové anestezii. Lékař do močovodu prostrčí tenkou trubičku s kamerou a světlem, kudy je možné dovnitř zavést nástroje, a močový kámen odstraní nebo nadrtí (s následnou extrakcí úlomků).

Další možností je mimotělní litotrypse rázovou vlnou (LERV), což je neinvazivní způsob léčby močových kamenů, který je vhodný u konkrementů umístěných v proximálním úseku močovodu. To znamená, že jsou lokalizovatelné ultrasonograficky. Lékaři v tomto případě na ledvinu nasměrují rázové vlny, které rozdrtí močové kameny na malé kousky a ty jsou pak vyplaveny spolu s močí.

Pokud není možné konkrement extrahovat, lékaři přistupují k akutní derivaci moči díky zavedení stentu obcházejícího překážku. Jedná se o tenkou trubičku, která se prostrčí močovodem až do ledviny, což zajistí jeho průchodnost a normální odtok moči, přičemž odejít mohou i močové kameny. Hrozí-li u pacienta urosepse (kolika s teplotami) nebo selhání ledvin, provádí se drenáž moči prostřednictvím nefrostomie.

Trápí-li pacienta obtížně dostupné nebo příliš velké močové kameny, lékaři někdy využívají perkutánní nefrolitotomii (PNL). Jedná se o operační postup, který se provádí při celkové anestezii a skrze pokožku dochází k odstranění kamene z ledviny nebo močových cest. Selžou-li všechny ostatní postupy, řešením pak může být otevřená operace označovaná jako ureterolitotomie.

Po odstranění konkrementu je nutné stav pacienta zkontrolovat, a to například pomocí ultrazvukového vyšetření a nativního nefrogramu. Lékař by měl člověka také poučit, jak zabránit recidivám. V rámci prevence se doporučuje pít dostatečné množství tekutin, věnovat se aktivnímu pohybu, snížit příjem sodíku (soli) nebo omezit rizikové potraviny (vnitřnosti, mořské plody).

Zdroje: stefajir.cz, wikiskripta.eu, cs.medlicker.com

  • Žá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 »