Nedostatek železa může vést k chudokrevnosti i zástavě srdce. V jakých potravinách se prvek nachází?

4. 8. 2021 9:00
přidejte názor
Autor: Shutterstock

Trpíte pravidelnými bolestmi hlavy, jste pobledlí a k tomu všemu vás obtěžuje neustálý pocit vyčerpání? Pak je na čase zjistit, zda máte v krvi dost železa. Jeho nedostatek trápí hlavně ženy a může vést až ke vzniku anémie. Jak se nedostatek jednoho z nejdůležitějších prvků v našem organismu projevuje?

Železo je jedním z nejdůležitějších prvků, které lze nalézt v lidském organismu. Potřebujeme ho pro správnou funkci jednotlivých orgánů a buněk, distribuci kyslíku v těle, tvorbu některých hormonů i růst tkání. Vliv má rovněž na tělesnou energii.

Pokud bychom prvek hledali, nalezli bychom ho v hemoglobinu, který je obsažen v červených krvinkách, jež přenášejí kyslík k buňkám. Současně se železo vyskytuje také v myoglobinu, který zásobuje kyslíkem svaly, anebo v enzymech a imunitním systému.

Lidské tělo obsahuje zhruba 6 gramů železa, což není úplně hodně. Organismus má tedy ve zvyku železem zpravidla šetřit. Pokud hladina železa v krvi klesne pod normální úroveň, může snadno dojít k narušení výše zmíněných funkcí. Zároveň se zvyšuje riziko rozvoje anémie z nedostatku železa.

Doporučená denní dávka železa

Co se týče doporučené denní dávky, ta je v průměru stanovená na 14 mg pro člověka. Toto množství je ale nutné přizpůsobovat pohlaví i jednotlivým životním etapám. Zatímco muži si vystačí i s 10 mg na den, menstruující ženy a dárci krve potřebují až 28 mg na den. Podobnou spotřebu pak mají také těhotné ženy. A zapomínat by se nemělo ani na děti, které železo potřebují pro správný vývoj, přičemž jejich nároky se liší v závislosti na věku:

  • děti ve věku 4–7 let: 8 mg/den,
  • děti ve věku 7–10 let: 10 mg/den,
  • chlapci ve věku 10–19 let: 12 mg/den,
  • dívky ve věku 10–19 let: 15 mg/den.

Je rovněž nutné říct, že neexistuje pouze jeden typ železa. Rozlišujeme totiž hned dva, konkrétně hemové a nehemové železo. Zatímco první ze zmíněných se vyskytuje pouze v živočišných produktech, druhé nalezneme také v těch rostlinných. Rozdíl je také ve vstřebávání. Z hemového železa se vstřebává zhruba 10–25 %, z nehemového pouze 8–10 %.

Vzhledem k tomu, že se hemové železo vyskytuje pouze v živočišných produktech, bývají jeho nedostatkem ohroženi striktní vegetariáni, vegani a jedinci, kteří často a dlouhodobě podléhají přísným redukčním dietám.

Příčiny nedostatku železa

Nedostatek železa je zpravidla úzce spojen s krevními ztrátami, mezi které patří i pravidelná menstruace. To je ostatně důvodem, proč nedostatkem tohoto prvku trpí častěji ženy. Příčinou obtíží však mohou být i některá onemocnění, která se s chronickým krvácením zpravidla pojí. Jedná se například o:

  • zhoubné i nezhoubné nádory dělohy,
  • poškození ledvin a močových cest,
  • krvácení do trávicího ústrojí vlivem vředu, jícnových varixů, nádorů či hemoroidů.

Krvácení do gastrointestinálního traktu pak mohou vyvolat i některé léky, jako:

V neposlední řadě může být nedostatek železa způsoben poruchou jeho vstřebávání. Skladba jídelníčku na vině bývá jen zřídka.

Nedostatek železa: příznaky

Vzhledem k tomu, jak široké spektrum funkcí železo v našem těle zastává, se jeho nedostatek projevuje mnoha více či méně nápadnými způsoby. Jaké jsou nejčastější příznaky nedostatku železa?

Únava až pocit vyčerpání

Jak spolu souvisí nedostatek železa a kruhy pod očima? Víc, než se může zdát. Únava a pocit vyčerpání totiž patří mezi nejčastější, ale zároveň i nejhůře rozpoznatelné projevy nedostatku železa. Kvůli nízkým hodnotám tohoto prvku nedochází k okysličování tkání a tělu se tak nedostává potřebné energie. Pokud tedy kromě běžného vyčerpání pociťujete také slabost, podrážděnost a navíc máte problémy se soustředěním, může být na vině právě nedostatek železa. Koneckonců, ne nadarmo se anémie někdy označuje také jako nemoc unavené krve.

Bledost

Ačkoli je bledý odstín kůže zpravidla geneticky podmíněný, nepřirozená bledost může být i jedním z příznaků některých zdravotních problémů, a to včetně nedostatku hemoglobinu, který kromě železa obsahuje také červené barvivo. Právě to kůži dodává zdravě růžový nádech. Nízká hladina tohoto proteinu naopak způsobuje ztrátu této barvy. Tento příznak je pak více patrný hlavně u jedinců, kteří mají od přírody velmi světlou pokožku. Nedostatek železa se navíc projevuje také poblednutím:

  • rtů,
  • dásní,
  • vnitřní strany očních víček.

Časté zadýchávání

Zadýchávání je do jisté míry zcela přirozeným jevem, hlavně pak při vyšší fyzické námaze. Pokud však sotva popadáte dech i při zcela běžných činnostech, které jiní bez obtíží zvládají, může být na vině právě nedostatek železa v těle, který nezvládá distribuovat kyslík do těla.

Bušící srdce

Bušení srdce patří mezi projevy nedostatku železa, které se objevují až v důsledku dlouhodobých obtíží. Je způsobeno snahou o zásobování těla kyslíkem. Tento syndrom není radno podceňovat. Dlouhodobě namáhané a unavené srdce, které se kromě bušení projevuje také nepravidelnými ozvami, šelestem a zvětšením, může končit i úplným selháním.

Bolest hlavy a závratě

Nedostatek hemoglobinu v krvi má za důsledek nedostatečné okysličení mozku, což způsobuje, že se jeho cévy zvětšují, čímž vytvářejí tlak na okolní tkáně. Tento stav pak vede k nepříjemným bolestem hlavy.

Syndrom neklidných nohou

Syndrom neklidných nohou je nepříjemný problém, který se projevuje především ve večerních hodinách, a to konkrétně v momentě, kdy se pacient uchýlí ke spánku. Místo klidu ho však čekají nepříjemné pocity, od kterých si dotyčný ulevuje pohyby nohou. A zatímco někteří se v posteli pouze převalují, jiní musí vstát a procházet se. Podle odborníků jsou obtíže u části postižených způsobeny špatným vstřebáváním železa ze stravy.

Jaké další má nedostatek železa projevy?

V důsledku nedostatku železa dochází rovněž ke snazší tvorbě modřin a na kůži se mohou objevit i takzvané petechie, které jsou následkem krvácení drobných cév. Časté je i brnění končetin jako následek poškození nervového systému.

Je však nutné podotknout, že projevy nedostatku železa a jejich závažnost jsou velice individuální. Organismus se na nedostatek kyslíku dokáže do určité míry adaptovat, a tak jsou lehčí formy anémie často odhaleny zcela náhodně.

Jak doplňujete železo?

Nedostatek železa u dětí

Železo je pro zdravý vývoj dítěte naprosto nezbytné, spotřeba dětských pacientů je navíc velmi vysoká. To je v jejich případě zapříčiněno rychlým růstem. Platí přitom obecné pravidlo: čím rychleji dítě roste, tím více je nedostatkem železa ohroženo. Koneckonců, děti ve věku 7–9 let mají stejnou denní spotřebu železa jako dospělí muži. Kromě toho bývají nedostatkem železa ohroženy také:

  • předčasně narozené děti,
  • děti s nízkou porodní vahou,
  • děti s chronickými infekcemi.

Děti přicházejí na svět se zásobou železa na první čtyři měsíce, následně je tento prvek nutné pravidelně doplňovat. Výhodu v tomto případě mají dlouhodobě kojené děti, u kterých doporučenou denní dávku pokryje železo získané z mateřského mléka. U starších a nekojených dětí je třeba dbát na složení jídelníčku.

Větší pozornosti by se v tomto ohledu mělo dostat dospívajícím dívkám, které přicházejí o železo vlivem menstruace a zejména zpočátku jsou náchylnější na poruchy cyklu. U nich je ztráta železa ještě výraznější.

Co se týče projevů nedostatku železa u dětí, patří sem především:

  • únava,
  • bledá pokožka,
  • nedostatečné soustředění,
  • spavost.

Nedostatek železa v těhotenství

Stejně jako u dětí hraje železo nezastupitelnou roli také v těhotenství. To je mimo jiné dáno tím, že se v těle gravidní ženy tvoří větší množství krve, aby jí byla dostatečně zásobená placenta. Dostatek železa je tedy nezbytný pro transport kyslíku pro dítě i tvorbu jeho krve. I přes zvýšené nároky, kdy nastávající maminky potřebují až dvojnásobek doporučené denní dávky, trpí nedostatkem prvku až polovina těhotných žen. Ty si zpravidla nejvíce stěžují na:

  • únavu,
  • slabost,
  • nesoustředěnost.

Jedná se o varovný signál, který by žádná žena neměla podceňovat. Koneckonců, nedostatek železa v těhotenství může být příčinou neukončeného vývoje některých orgánů, nízké porodní váhy i předčasného porodu. Dostatek železa s sebou navíc přináší i řadu zdravotních benefitů. Zmírňuje porodní křeče a bolesti a má pozitivní vliv také na poporodní rekonvalescenci.

Kromě železa by těhotným ženám neměla chybět ani kyselina listová, která je důležitá pro správný vývoj nervové soustavy dítěte, chrání navíc před poruchami neurální trubice a dalšími závažnými komplikacemi i rizikem potratu.

Anémie z nedostatku železa

Sideropenická anémie, známá také jako anémie z nedostatku železa, je v našich podmínkách nejčastějším typem anémie, tedy chudokrevnosti. V České republice jí trpí asi 5 % mužů a 8–20 % žen. V rozvojových zemích je podíl této choroby ještě mnohem vyšší, četnost výskytu se pohybuje v rozmezí 30–70 %.

K rozvoji anémie z nedostatku železa dochází vždy v důsledku porušené rovnováhy mezi příjmem a výdejem železa z organismu. V takovém případě začne tělo železem velmi pečlivě šetřit, což znamená, že k tvorbě nových erytrocytů využije veškeré železo získané recyklací ze zaniklých červených krvinek.

Ke vniku sideropenické anémie pak typicky dochází následkem chronického krvácení. Často vzniká v důsledku:

 Na vině však může být také porucha vstřebávání železa z trávicího traktu anebo nevhodná strava s velkým podílem těžce vstřebatelných fytátů a fosfátů či s nedostatkem hemového železa, ale také zvýšené nároky organismu na potřebu tohoto prvku.

Jak rychle doplnit železo?

Pokud trpíte akutním nedostatkem, můžete vyzkoušet léky na nedostatek železa, konkrétně doplňky stravy, které mají různé formy. Neužívejte je však v případě, že nedostatek železa nemáte potvrzený vaším lékařem, hrozilo by vám předávkování železem. A vzhledem k tomu, že jeho nadbytečné množství tělo neumí samo vyloučit, je pro organismus škodlivé.

Mnohé léky a doplňky stravy mohou navíc způsobovat zácpu, nevolnost či bolest žaludku. Dospělý člověk by proto nikdy neměl překračovat doporučenou denní dávku, která je v průměru 14 mg na den. Těhotné a kojící ženy a dárci krve mají spotřebu zhruba dvakrát vyšší.

Myslete rovněž na to, že není železo jako železo. Doplňky obsahují převážně nehemové železo, které je třeba užívat nalačno. U hemového železa bývají nežádoucí účinky naopak minimální nebo žádné. Jeho vstřebávání navíc není ovlivněno stravou. Kromě doplňování železa jako takového je rovněž nutné myslet na jeho řádné vstřebávání. Tento proces významně podporuje vitamín C, který by měli ve vysoké míře konzumovat hlavně jedinci, kteří se vyhýbají živočišným produktům. Současná konzumace mléčných výrobků, vlákniny a polyfenolů obsažených v kávě, čaji a červeném víně vstřebávání železa naopak komplikuje.

Potraviny s vysokým obsahem železa

Železo se samozřejmě můžete pokusit doplnit pomocí vyváženého jídelníčku, konkrétně pak potravinami, které obsahují vysoké množství tohoto prvku. Jsou to například tyto:

Hřiby sušené 690 mg/kg
Droždí sušené 175 mg/kg
Sója 90–150 mg/kg
Játra 70–150 mg/kg
Čočka 70–110 mg/kg
Mák 80–115 mg/kg
Fazole 50–100 mg/kg
Pažitka 86 mg/kg
Kakao 80 mg/kg
Pórek 75 mg/kg
Vaječný žloutek 70 mg/kg
Pistácie 68 mg/kg
Slunečnicové semínko 67 mg/kg
Ústřice 60 mg/kg
Cizrna 60 mg/kg
Hrách 45 mg/kg
Maso hovězí 30–50 mg/kg
Arašídy 23–46 mg/kg
Ovesné vločky 38 mg/kg
Špenát 33 mg/kg
Ořechy 30 mg/kg

Potraviny bohaté na železo by měly být součástí jídelníčku i v momentě, kdy je hladina železa v normě. Mohou být navíc nápomocné například během těhotenství anebo v průběhu menstruace, kdy jsou nároky organismu na spotřebu znatelně vyšší.

Zdroj: to.fnplzen.cz, lékárna.cz, lekarnahartmann.cz, vyzivaspol.cz, porodnice.cz

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