Příznaky těhotenské cukrovky jsou velice nenápadné. Může však ohrozit zdraví matky i plodu

15. 2. 2024 7:30
přidejte názor
Autor: Depositphotos/imagepointfr

Mezi standardní těhotenská vyšetření, která by měla v průběhu gravidity podstoupit každá nastávající matka, dnes patří test na těhotenskou cukrovku. Přestože toto onemocnění většinou probíhá bez jakýchkoliv viditelných příznaků, pokud se správně neléčí, může mít na svědomí řadu závažných zdravotních komplikací. Ohrožuje totiž správný vývoj plodu a může způsobit jeho úmrtí.

Co je těhotenská cukrovka?

Co se dozvíte v článku
  1. Co je těhotenská cukrovka?
  2. Jak se zjišťuje těhotenská cukrovka?
  3. Jaké má těhotenská cukrovka příznaky?
  4. Možné komplikace těhotenské cukrovky

Těhotenská cukrovka (gestační diabetes) je stav spojený se zvýšenou hladinou krevního cukru, což se u pacientky poprvé projeví během těhotenství. Jelikož může mít negativní vliv na zdraví nastávající matky i jejího dítěte, je nutné situaci monitorovat a v případě potřeby nasadit také vhodnou léčbu. Po porodu se narušený metabolismus sacharidů většinou sám od sebe upraví.

Přestože se dříve uvádělo, že těhotenská cukrovka postihuje zhruba 3–5 % nastávajících matek, dnes už víme, že je tento problém ve skutečnosti mnohem častější. Jedním z důvodů může být skutečnost, že lidé odsouvají těhotenství na později a prvního potomka si nezřídka pořizují až po 30. roce věku. S přibývajícími roky se totiž riziko rozvoje těhotenské cukrovky výrazně zvyšuje.

Přestože si ženy trpící těhotenskou cukrovkou často vyčítají, že během gravidity konzumovaly příliš mnoho sladkostí, ve skutečnosti zde hraje svou roli hlavně dědičnost. Zdravý organismus bez genetické predispozice k rozvoji gestačního diabetu by si měl s přísunem sladkého poradit, a to i ve chvíli, kdy těhotenství klade na metabolismus pacientky zvýšené nároky.

Kromě věku a dědičných predispozic (výskyt těhotenské cukrovky či diabetu 2. typu v rodině) zde ovšem mohou hrát roli i další rizikové faktory. K těm patří například obezita a nezdravý životní styl (nedostatek pohybu, stres, špatné stravovací návyky), ale i těhotenská cukrovka během předchozí gravidity, syndrom polycystických ovarií nebo porod dítěte, které vážilo více než 4 kilogramy. [1, 2, 3, 45]

Jak se zjišťuje těhotenská cukrovka?

Dnes se v České republice na přítomnost gestačního diabetu testují všechny nastávající matky. Jelikož se tento problém typicky začíná projevovat až ve druhé polovině těhotenství, diagnostické vyšetření zjišťující jeho výskyt (oGTT neboli orální glukózový toleranční test) se typicky provádí mezi 24. a 28. týdnem gravidity. Výjimkou jsou pouze pacientky, které trpěly cukrovkou už před těhotenstvím.

Tento test se provádí v ranních hodinách, kdy má pacientka za sebou minimálně 8 hodin lačnění (je možné pít pouze čistou vodu). Ve dnech předcházejících tomuto vyšetření by se nastávající maminka měla stravovat normálně a neomezovat příjem sacharidů, ale den dopředu je nutné vyhnout se jakýmkoliv náročnějším fyzickým výkonům.

Nejprve se odebere první vzorek krve a vyšetří se glykémie nalačno. Na základě zjištěné hodnoty se pak rozhoduje o dalším pokračování. Je-li vše v normě, žena vypije roztok glukózy a po určité době dojde k odebrání dalších vzorků krve (v 60. a 120. minutě). Podle výsledků pak lékař může říct, zda je pacientka v pořádku, nebo se u ní naopak projevila těhotenská cukrovka.

Bude-li ovšem glykémie nalačno vyšší než stanovená hodnota hned po prvním odběru, v testu se nepokračuje a žena musí přijít na další pokus. Pokud se situace opakuje i další den, lékař pacientce diagnostikuje těhotenskou cukrovku a oGTT již nepodstupuje. V opačném případě se provede standardní test a situace se opět hodnotí na základě zjištěných hodnot. [6, 7, 89]

Jaké má těhotenská cukrovka příznaky?

Těhotenská cukrovka je metabolická porucha, k jejímž základním projevům patří zvýšená hladina cukru v krvi (glykémie). Na vině je přitom snížená citlivost tkání nastávající matky na působení inzulinu v kombinaci s nedostatečnou schopností slinivky břišní kompenzovat zvýšenou potřebu tohoto hormonu právě během těhotenství.

Pokud je žena v očekávání, její nadledviny a placenta produkují velké množství hormonů působících proti inzulinu (vyvolávají inzulinovou rezistenci). Slinivka by měla zareagovat jeho zvýšenou produkcí, ale u některých žen tento kompenzační mechanismus funguje pouze omezeně. Hladina těhotenských hormonů navíc během gravidity neustále stoupá a problém se může postupně zhoršovat.

Gestační diabetes se obvykle začíná projevovat ve druhé polovině těhotenství, přičemž nejpozději do konce šestinedělí by se porucha metabolismu měla zcela normalizovat, jelikož po porodu rychle klesá hladina těhotenských hormonů. Nestane-li se tak, což potvrdí opakovaný zátěžový test, jedná se o jiný druh cukrovky, který je nutné řešit na diabetologii.

Pokud jde o příznaky těhotenské cukrovky, problém zde spočítá hlavně v tom, že u většiny pacientek probíhá toto onemocnění zcela bezpříznakově. Že nastávající matka trpí gestačním diabetem, je tedy možné zjistit pouze prostřednictvím laboratorního vyšetření. Jen dlouhodobě neléčená těhotenská cukrovka spojená s vysokými hladinami krevního cukru může vyvolat viditelné symptomy.

Projevy těhotenské cukrovky:

  • výrazná únava,
  • zvýšená žízeň,
  • časté močení (také v noci),
  • špatné hojení ran,
  • vyšší náchylnost k infekcím (například kvasinkovým).

Zvýšená hladina krevního cukru bývá patrná především po jídle, které obsahuje sacharidy, ale vyšší glykémii mohou mít některé pacientky i nalačno. V určitých případech se pak může objevit také cukr v moči, ale pouze na základě tohoto faktoru ještě není možné těhotenskou cukrovku diagnostikovat. Další postup tedy závisí na uvážení ošetřujícího lékaře. [10, 11, 12, 13, 14]

Negativní Rh faktor může představovat riziko v druhém těhotenství. Jaká je prevence?
Přečtěte si také:

Negativní Rh faktor může představovat riziko v druhém těhotenství. Jaká je prevence?

Možné komplikace těhotenské cukrovky

Pokud se těhotenskou cukrovku podaří odhalit zavčasu a pacientka dodržuje předepsanou léčbu, průběh těhotenství by měl být zcela normální. Neléčený nebo nedostatečně léčený gestační diabetes však může způsobit vznik řady zdravotních potíží, což ohrožuje především správný vývoj dítěte.

Rizika pro miminko

Jelikož vyšší množství krevního cukru proniká placentou také do krevního oběhu dítěte, jeho organismus musí na tuto situaci adekvátně zareagovat. Důsledkem je zvýšená tvorba inzulinu ve slinivce břišní, která bývá u dítěte v druhé polovině těhotenství již dobře vyvinutá. Ačkoliv plod tedy cukrovkou netrpí, daný stav se pojí s určitými riziky, která není radno podceňovat:

  • Rychlejší růst a přibývání na váze (makrosomie) – organismus dítěte se musí vypořádat se zvýšeným přísunem cukru a zvýšenou hladinou inzulinu. Cukr přitom dodává tělu energii a inzulin je růstový hormon, kvůli čemuž plod rychleji přibývá na váze. Během porodu takové děti obvykle váží více než 4 kilogramy, což může způsobit poranění ramen či zlomeninu klíční kosti. Právě z toho důvodu se v takovém případě doporučuje raději porod císařským řezem.
  • Dýchací problémy a srdeční potíže – přestože je plod matky s neléčenou těhotenskou cukrovkou větší, než by měl za normální situace být, jeho orgány mohou ve vývoji zaostávat. To se po porodu projeví řadou zdravotních komplikací, kam patří především problémy s dechem, poruchy srdečního rytmu nebo těžká novorozenecká žloutenka. Pozor je nutné dávat na perinatální asfyxii, syndrom dechové tísně, tranzitorní tachypnoe, hypertrofii septa či hypertrofickou kardiomyopatii.
  • Poporodní hypoglykémie – po narození se u miminka může projevit snížený obsah cukru v krvi, jelikož sice ustal zvýšený přísun cukru z matčina těla, ale hladina inzulinu ještě nějaký čas neklesne. Je-li situace opravdu vážná, mohou se dostavit křeče nebo poruchy vědomí.
  • Úmrtí plodu – pokud není těhotenská cukrovka dostatečně léčená, v nejhorším případě může plod v děloze odumřít. Toto riziko je mnohem vyšší v závěrečné fázi gravidity, a proto by ženy s těhotenskou cukrovkou neměly přenášet (lékaři tedy mohou přistoupit k vyvolání porodu).
  • Komplikace v pozdějším věku – v průběhu života se mohou u dětí, jejichž matky se v těhotenství potýkaly s neléčenou nebo špatně léčenou cukrovkou, objevit pozdní potíže. Hrozí u nich například vyšší riziko mozkové dysfunkce nebo dětské obezity a zároveň se u nich často projevuje syndrom poruchy pozornosti s hyperaktivitou. Kromě toho jsou náchylnější k rozvoji diabetu 2. typu.

Soubor příznaků u dítěte nastávající maminky s neléčenou nebo špatně léčenou těhotenskou cukrovkou lékaři souhrnně označují termínem diabetická fetopatie. Spadá sem rychlejší přibývání na váze v kombinaci s různými poporodními komplikacemi, které jsou popsány výše.

Riziko vrozených vývojových vad nicméně těhotenská cukrovka typicky nezvyšuje, jelikož vznikají zhruba do 8. týdne nitroděložního vývoje, zatímco gestační diabetes se běžně objevuje až později během gravidity. Větší nebezpečí v tomto ohledu tak hrozí především ženám, které se s cukrovkou potýkaly již před početím. [15, 16, 17, 18, 19, 20]

Projevila se u vás těhotenská cukrovka?

Rizika pro těhotnou ženu

Hladina cukru v krvi, která bývá u nastávající matky s těhotenskou cukrovkou zvýšená, se obvykle po porodu sama upraví. Pokud se ovšem gestační diabetes správně neléčí, hrozí i těhotné pacientce některé nepříjemné zdravotní komplikace, kam patří například:

Právě z toho důvodu je nutné podstoupit v průběhu gravidity test na těhotenskou cukrovku, a pokud se její přítomnost potvrdí, dodržovat veškerá doporučení ošetřujícího lékaře. Podaří-li se gestační diabetes správně léčit, hladina cukru v krvi u nastávající matky by měla být v normě a neměla by ohrozit zdraví těhotné ženy ani jejího dítěte. [21, 22, 23, 24]

Zdroje: diavize.cz, tehotenskacukrovka.cz, wikiskripta.eu, nzip.cz, ftn.cz, mayoclinic.org, healthline.com, my.clevelandclinic.org, cdc.gov

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