Kyselina listová je důležitá hlavně pro těhotné ženy. Její nedostatek způsobuje vývojové vady plodu

29. 3. 2022 7:30
přidejte názor
Autor: Depositphotos

Kyselina listová je vitamín skupiny B, proto je někdy označována jako vitamín B9. O její důležitosti se hovoří především v souvislosti s těhotenstvím a vývojem plodu. Mezi bohaté zdroje kyseliny listové patří především špenát, zelí, růžičková kapusta, chřest, celozrnné obiloviny a klíčky, mléčné výrobky, vejce, kvasnice nebo vnitřnosti.

Co je kyselina listová?

Co se dozvíte v článku
  1. Co je kyselina listová?
  2. Jaké má kyselina listová účinky?
  3. Kyselina listová v těhotenství
  4. Kyselina listová: nedostatek
  5. Kyselina listová v potravinách
  6. Doporučená denní dávka kyselina listové
  7. Předávkování kyselinou listovou
  8. Přírodní kyselina listová vs. syntetická kyselina listová

Kyselina listová je jedním z vitamínů skupiny B. Jedná se tudíž o vitamín, který je rozpustný ve vodě. Lze ji najít i pod dalšími označeními, jako je vitamín B9, folát, folacin nebo Acidum folicum. Název kyselina listová vychází z toho, v jakých potravinách se tento vitamín vyskytuje nejhojněji. Logicky jde hlavně o listovou zeleninu. [1]

Poprvé byla v roce 1941 kyselina listová izolována z listů špenátu, postupně se ale přišlo na to, že mezi její bohaté zdroje patří veškerá listová zelenina i jiné druhy potravin.

Dostatečný příjem kyseliny listové je nezbytný hlavně v těhotenství. Spolu s vitamínem B12 (kobalaminem) se totiž významně podílí na syntéze buněk a jejich dělení. Nedostatečný příjem kyseliny listové v těhotenství může vést k vývojovým poruchám plodu. K těmto stavům dochází typicky v rozvojových zemích, jejichž obyvatelé často trpí podvýživou nebo přijímají stravu chudou na vitamíny. [2, 34]

Jaké má kyselina listová účinky?

Kyselina listová není důležitá pouze pro těhotné ženy. Na její dostatečný příjem by se měli zaměřit úplně všichni, protože neméně potřebná je kyselina listová pro muže. Mezi důležité úkoly kyseliny listové patří:

  • krvetvorba – zajištuje tvorbu funkčních červených krvinek (erytrocytů),
  • buněčné dělení a tvorba nukleových kyselin,
  • správná funkce nervové soustavy,
  • regulace metabolismu homocysteinu – zajišťuje, že se jeho hladina bude držet v normě,
  • snížení únavy a vyčerpání. [5, 6]

Kyselina listová v těhotenství

Suplementaci kyseliny listové v těhotenství doporučují téměř všichni lékaři a gynekologové. Během těhotenství přispívá k rozvoji zárodečných tkání a podněcuje dělení buněk. Vůbec nejdůležitější je podávat zvýšené dávky folátu v prvních týdnech těhotenství.

Kyselina listová zajišťuje správný vývoj plodu a funguje i jako prevence proti rozvoji vážných vývojových vad:

  • rozštěp neurální trubice,
  • rozštěp patra,
  • vrozené vady srdce,
  • vrozené vady močových cest,
  • vrozené vady končetin.

Kromě vzniku těžkých vývojových vad hrozí při deficitu kyseliny listové v těhotenství i zvýšené riziko potratu, odtržení placenty a předčasný porod. [7, 8, 9, 10]

Kyselina listová: nedostatek

Jak se projevuje nedostatek kyseliny listové a v jakých situacích nastává? Dochází tomu při jejím nedostatečném přívodu potravou, zhoršeným vstřebáváním nebo zvýšenou potřebou vitamínu (typicky v těhotenství). Nedostatek kyseliny listové se projeví těmito příznaky:

  • megaloblastová anémie – porucha krvetvorby, vznikají abnormální erytrocyty neschopné efektivně přenášet kyslík,
  • únava, bledost, výkyvy nálad – příznaky vyplývající ze vznikající anémie,
  • poruchy trávení,
  • změny na sliznicích,
  • snížení plodnosti u žen – v největším riziku jsou kuřačky a ženy konzumující chudou stravu.

Nedostatek kyseliny listové může snadno nastat u pacientů na hemodialýze či u pacientů trpících poruchami krve, lupénkou, alkoholismem nebo chorobami jater. [11, 12]

Diagnostika deficitu kyseliny listové

Kromě klinických příznaků vyplývajících z rozvíjející se anémie a změn v krevním obrazu se provádí také laboratorní stanovení hladiny folátu v krevním séru. Současně se doporučuje provést také stanovení hladiny homocysteinu, která při nedostatku kyseliny listové vzrůstá. [13]

Kyselina listová v potravinách

Co obsahuje kyselinu listovou? Jde především o listovou zeleninu, ale i další potraviny:

  • zelí,
  • brokolice,
  • růžičková kapusta,
  • špenát,
  • mrkev,
  • chřest,
  • fazolové lusky,
  • kvasnice,
  • celozrnné obiloviny,
  • luštěniny,
  • mléčné výrobky a vejce,
  • játra a ledvinky (nejsou vhodné v těhotenství).

U zeleniny je důležité uvědomit si, že varem se většina kyseliny listové zničí (až 95 %). Vhodné je proto zařadit do jídelníčku co nejvíce kyseliny listové ve formě zeleninových salátů, čerstvých ovocných či zeleninových šťáv a smoothies.

Šikovným trikem může být snězení jedné hrsti oříšku denně a konzumace zdravé snídaně v podobě lehce povařených ovesných vloček a pšeničných klíčků, do kterých lze zamíchat jogurt, tvaroh nebo mléko. [14, 15, 16]

Doporučená denní dávka kyselina listové

Dospělým osobám se obecně doporučuje konzumovat minimálně 200 mikrogramů kyseliny listové denně. V těhotenství a u dětí se pak denní potřeba kyseliny listové mění:

  • v těhotenství: 260–400 μg,
  • pro mladistvé: 150–200 μg,
  • pro děti ve věku 7–10 let: 100 μg,
  • pro děti ve věku 4–6 let: 75 μg,
  • pro děti ve věku 1–3 roky: 25–50 μg.

Protože se veškeré množství kyseliny listové z potravin nemusí správně vstřebávat (případně se rozpadne vařením), lze ji přijímat i prostřednictvím doplňků stravy.

Syntetický vitamín B9 je dobrou pojistkou pro zajištění dostatečného příjmu kyseliny listové, zejména v těhotenství. Nabídka potravinových doplňků je velice pestrá. Ideální je poradit se před jejich užíváním s lékařem nebo lékárníkem, který doporučí vhodné dávkování.

Doplňky stravy s kyselinou listovou jsou doporučovány hlavně těžkým alkoholikům a pacientům, kteří užívají léky zvyšující vyplavování kyseliny listové z těla:

  • antikonvulziva (léky proti křečím),
  • léky proti malárii,
  • antikoncepční tablety obsahující estrogeny,
  • některé léky proti bolesti,
  • kortikosteroidy,
  • sulfonamidy. [17, 18]

Předávkování kyselinou listovou

Může mít kyselina listová nežádoucí účinky? Odpověď zní ne. Kyselina listová totiž patří mezi vitamíny rozpustné ve vodě, tak jako všechny vitamíny skupiny B. Přebytečné množství kyseliny listové, které tělo nevyužije, je vyloučeno močí.

Nadbytečný příjem kyseliny listové tedy nemá přímé negativní důsledky na zdraví, ale může maskovat nedostatek vitamínu B12. I proto se doporučuje nepřekračovat horní hranici maximálního denního přijmu, která činí 1000 μg. [19, 20]

Přírodní kyselina listová vs. syntetická kyselina listová

Jak se vyznat v pojmech souvisejících s příjmem kyseliny listové? Přírodní kyselina listová obsahuje folát, což je přirozená aktivní forma tohoto vitamínu. Nachází se v listové zelenině i živočišných potravinách. Obsah folátu v potravinách se uvádí v IU (univerzální jednotky pro vyjadřování množství). Dospělí by měli přijímat 200 IU folátu denně a děti 150–200 IU.

Oproti tomu syntetická kyselina listová, která se nachází v doplňcích stravy nebo obohacených potravinách, je pouze prekurzorem folátu. To znamená, že lidské tělo nejdřív musí tuto syntetickou formu vitamínu B9 rozštěpit, aby z něj získalo účinný folát. K tomu slouží enzym methyltranshydrofolátreduktáza (MTHRF), který je ale u řady lidí oslaben nebo není vůbec funkční. Proto je někdy efektivnější přijímat již aktivní folát. [21, 22]

Zdroje: ncbi.nlm.nih.gov, academic.oup.com, sciencedirect.com, digilib.k.utb.cz, dspace.cuni.cz, mdpi.com, cochranelibrary.com, link.springer.com, ikem.cz, onlinelibrary.wiley.com, bezpecnostpotravin.cz

Co je kyselina listová?
Kyselina listová je jedním z vitamínů skupiny B. Je nesmírně důležitá pro správný vývoj plodu v těhotenství a také pro správnou funkci nervové soustavy a krvetvorbu. Účinnou látkou kyseliny listové je folát.
Proč je kyselina listová v těhotenství tak důležitá?
Dostatečný příjem kyseliny listové v těhotenství (zejména v prvních týdnech) zajišťuje správný vývoj plodu. Navíc funguje jako prevence proti vzniku vrozených vývojových vad (rozštěp neurální trubice, rozštěp patra, vady srdce, močových cest a končetin).
V jakých potravinách se nachází kyselina listová?
Pojmenování kyselina listová odkazuje na listovou zeleninu, která je bohatým zdrojem tohoto vitamínu. Jde například o růžičkovou kapustu, zelí, špenát, chřest či brokolici. Hojné množství folátu obsahují také luštěniny, ovesné vločky, celozrnné pečivo, avokádo, kvasnice, ledvinky či játra.
Jak se na těle projeví nedostatek kyseliny listové?
Dlouhodobý deficit kyseliny listové vede k rozvoji megaloblastické anémie. Při této poruše krvetvorby vznikají abnormálně velké erytrocyty nepravidelného tvaru, které jsou pro přenos kyslíku neefektivní a velmi rychle se rozpadají. Nedostatečné okysličení tkání se klinicky projevuje únavou, bledostí, výkyvy nálad, poruchami trávení a změnami na sliznicích.
  • Žá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 »