Proteinové nápoje podle odborníků: Při sportu, při dietě, dokonce i dětem

11. 2. 2016

Sdílet

Když se řekne „proteinový nápoj“ nebo také „proteiňák“, leckdo se obrní předsudky a vybaví se mu obraz steroidy „nabušeného“ kulturisty. Co vlastně nabízí tělu proteinový prášek, kdy je prospěšný a v jakém množství?

Proteinové prášky automaticky řadíme mezi všemožné „sypání“, které si lze koupit jen potutelně přes internet a na něž si přece cvičící nebo kdokoliv jiný musí automaticky vytvořit závislost. To je ale mýtus. Zeptala jsem se proto na všechny podrobnosti nutriční terapeutky Dany Šímové a odborníka na výživu Martina Škáby, který mě překvapil tím, že by proteinový prášek dal klidně i dítěti. Vlastně… a proč ne?

Proteinový prášek dodá dostatek bílkovin, ale nezvýší příliš kalorický příjem

K proteinovým nápojům máme skoro stejný vztah jako pravěcí lovci k bouřkám – bojíme se jich, protože nevíme, k čemu se dají využít a z čeho vlastně jsou. Na proteinovém prášku přitom není nic zvláštního. „Proteinové nápoje jsou vhodnými suplementy potravy, které lidskému tělu dodávají zvýšené množství bílkovin při nízkém kalorickém příjmu,“ říká Dana Šímová.

Co je proteinový prášek

  • Proteinové prášky (resp. nápoje, které z prášků po smíchání s vodou získáme) jsou suplementy potravy, které tělu dodávají zvýšené množství bílkovin.
  • Nejčastěji jsou doporučovány sportovcům, kteří by při své fyzické aktivitě nebyli téměř schopni přijmout ideální množství bílkovin a zároveň udržet energetický příjem ve správném rozmezí.
  • Některé jsou také vhodným doplňkem stravy těch, kteří si svalovou hmotu chtějí udržet, nebo se snaží zhubnout a dodat organizmu dostatek bílkovin za současné eliminace sacharidů a tuků.
  • Co se týče vzniku proteinových prášků, nelze jednoznačně říci, jak proteinový prášek vzniká vzhledem k tomu, že na trhu je skutečně velké množství různých druhů. Jen samotný syrovátkový protein nezískáváme pouze jednou metodou. V současné době nejužívanější metoda CFM (Cross Flow Microfiltration) představuje oddělování syrovátkové bílkoviny prostřednictvím filtrace přes keramické filtry se zkříženým tokem. O kvalitě proteinu pak rozhoduje propustnost filtrů – velikost pórů.

V praxi se můžeme setkat s jednosložkovými či vícesložkovými proteinovými prášky. Kvalitní proteinový prášek poznáme podle složení, a také nutriční hodnoty.

Nejčastěji se setkáme se syrovátkovým proteinem (neplést se sušenou syrovátkou), dále také s kaseinovým proteinem, ve kterém je bílkovina získávána z mléka stejně jako syrovátka.

Trendem jsou v současné době proteinové prášky rostlinného původu, např. hrachový nebo konopný, se kterými se setkáme i v prodejnách se zdravou výživou a bio potravinami.

Živočišné, nebo rostlinné proteiny?

Už v tomto bodě se ale často názory rozcházejí. Jsou rostlinné proteiny stejně hodnotné jako ty živočišného původu? Kdybychom dělali anketu v plné posilovně, zvítězil by asi na celé čáře protein syrovátkový, ale není to další zažitý omyl? Ani oslovení odborníci se v tomto zcela neshodují. Zatímco Martin Škába vyzdvihování syrovátkového proteinu označuje za mýtus, nutriční terapeutka Dana Šímová jako ideální zdroj bílkovin sportovce po tréninku stále vidí syrovátkový protein.

„Jde o to, že ve stravě panují stále se opakující mýty nebo špatně interpretované vědecké informace. Ty se pak šíří mezi lidmi dále a dlouhou dobu přetrvávají. Většina sportovců chce mít ve složení stravy hlavně živočišné zdroje bílkovin, protože se dočetli, že potřebují podpořit co nejvyšší regeneraci a tvorbu růstového hormonu. Ale takto černobílé to není,“ říká Martin Škába s odkazem na to, že současní vědci a lékaři již prokázali, že i rostlinné bílkoviny jsou plnohodnotné. Při výběru proteinových nápojů by se spíše zaobíral jejich složením.

Aktivní sportovec potřebuje extra bílkoviny

Mají sportovci vůbec nějaký důvod konzumovat proteinové nápoje? Každého laika asi napadne i otázka, zda nemohou bílkoviny zkrátka dodat organismu z potravy. Vždyť všichni máme možnost jíst maso, luštěniny, mléčné výrobky a další zdroje bílkovin. „Proteinový nápoj slouží u sportovců jako doplněk stravy pro navýšení bílkovin a lehce stravitelných sacharidů. Pokud je někdo aktivní sportovec, potřebuje denně 1,5 až 2 g bílkovin (dle sportovního zaměření) na kilogram hmotnosti,“ říká Dana Šímová.

Pro představu – muž vážící 80 kg by tedy měl z potravy denně přijmout 120 až 160 g bílkovin. Přitom 100 g kvalitního kuřecího masa obsahuje kolem 25 g bílkovin, 100 g sýra cottage asi 14 g bílkovin, 100 g čočky asi 25 g bílkovin – a to jsem zmínila ty bílkovinami skutečně nabité potraviny. Třeba takový kefír obsahuje už jen 3 g bílkovin na 100 g, rýže 8 g bílkovin. „Není tedy možné, aby toto množství (pozn. 1,5 až 2 g na kilogram své váhy) člověk přijal v potravě tak, aby nepřibral na váze kvůli vysokému energetickému příjmu. Při objemové přípravě můžeme za nejvíce vhodné zdroje bílkovinných doplňků považovat syrovátkový izolát, koncentrát, hydrolyzát nebo jeho kombinace,“ dodává nutriční terapeutka.

Proteiny do běžného jídelníčku?

Tím bychom mohli označit za „vyřešené“ aktivní sportovce. Ale může se stát proteinový prášek součástí běžného jídelníčku i nesportujícího nebo jen rekreačně sportujícího jedince?

Dle nutriční terapeutky proteinové nápoje nemusí zdaleka sloužit jen těm, kteří usilují o nárůst svalové hmoty, ale i o její udržení nebo také při redukci hmotnosti.

 

Dana Šímová upozorňuje, že pro doplnění kvalitních živin by je do svého jídelníčku mohli zařadit i senioři. „Proteiny bych dával i dětem,“ říká dokonce Martin Škába, přičemž dodává, že pokud člověk nesportuje, postačí mu k doplnění jídelníčku proteinový prášek s nižším obsahem bílkoviny (pozn. sportovci si obvykle kupují proteinový prášek obsahující více jak 70 % bílkovin). S tím souhlasí i nutriční terapeutka, která doplňuje, že je mohou konzumovat děti od tří let věku.

Proteinové nápoje pro děti? Odborníci s tím nemají problém, naopak

Děti? Laika asi okamžitě napadá otázka, proč by děti měly pít proteinové nápoje? Dana Šímová však podotýká, že když se stravují ve školních zařízeních, rodič nemá často představu o tom, kolik jídla a jaké živiny denně jeho potomek přijímá. Ačkoliv jako rodiče naivně věříme, že naše ratolest všechno pěkně ve školní jídelně sní, přiznejme si, že se pravděpodobně většinou „porýpe“ ve špenátu, maso na talíři je zrovna to, které nejí, a o nevzhledně vypadajících luštěninách ani nemluvě. Pokud má navíc nějaké kapesné, dojídá se smaženými brambůrky z bufetu.

K tématu: Co si děti dávají ve školních automatech? Brambůrky a kafe

„V tomto případě dobrý proteinový koktejl připravený např. s ovocem po večeři může dětem doplnit nejen kvalitní bílkovinu, ale i potřebnou vlákninu, vitamíny a minerální látky,“ říká Dana Šímová.

I některé děti navíc navštěvují mnohdy skutečně fyzicky náročné sportovní kroužky, a na druhé straně máme i děti, které trpí nadváhou nebo obezitou. I pro ně by mohl být proteinový nápoj řešením.

Proteinový recept dle Martina Škáby

  • Smícháte namočená semínka s ovesnými vločkami, k tomu přidáte papáju nebo čerstvý ananas (ty podporují trávení), k tomu si přidáte několik kousků oblíbeného ovoce (jablka nebo borůvky, maliny, jahody, případně banán), přidáte několik mandlí natural a finálně zalijete vodou s proteinovým práškem.
  • Přidáte koření (např. skořici, sušený zázvor nebo kurkumu). Stačí jen špetka.
  • A pak vše důkladně rozmixujete tyčovým mixérem. Máte z toho velmi chutné jídlo. Jak na snídani nebo jako svačinu, případně i na oběd. Má nízký glykemický index.

Kvalitní proteinový prášek by neměl obsahovat žádné zbytečné chemické přísady, například sladidla

Kvalitní výrobek lze pořídit od každého typu proteinového prášku. Nutriční terapeutka říká, že pokud chceme proteinovým práškem, resp. nápojem, nahrazovat pravidelně jídlo, měl by obsahovat krom základních živin, jakými jsou bílkoviny, tuky a sacharidy, také vlákninu, vitamíny, minerální látky. „Neměl by obsahovat žádné zbytečné chemické přísady – barviva, sladidla, nebo konzervanty,“ upozorňuje Dana Šímová. Stejně jako lze získat velmi kvalitní syrovátkový protein, můžeme si koupit i skutečně kvalitní protein rostlinného původu.

Horší stravitelnost se často odvíjí od nevhodné konzumace

Někdo může při konzumaci proteinových nápojů jako jejich nevýhodu pociťovat horší stravitelnost. Ta se často objevuje i na internetových fórech, kde lidé jednotlivé doplňky stravy konzultují. Martin Škába ale podotýká, že stravitelnost z velké části ovlivňuje způsob konzumace. Jednoduše řečeno – když hltáme, hůře se nám tráví a zbytečně zatěžujeme trávicí systém. „Pokud chci podpořit trávení, musím také konzumovat potraviny bohaté na trávicí enzymy (např. čerstvá papája nebo ananas), dále také kvašené potraviny, jako je pickles nebo kysané zelí (samozřejmě bez pasterizace a konzervantů),“ dodává.

Tip: Recept na pickles je i receptem na posílení imunity

Ačkoliv se tu zatím o proteinových nápojích mluvilo spíše kladně, je nutné podotknout, že i v tomto případě všeho moc škodí. Pokud konzumujeme nějaké potraviny příliš, nebo si nejsme vědomi, že jsme alergičtí na některou její složku, můžeme i tady narazit.

 

Autor článku

Studentka Fakulty právnické Západočeské univerzity v Plzni. Jako redaktorka pracovala pro portál Nazeleno.cz a TopSrovnani.cz. Zajímá ji zdravý životní styl, problematika zdraví a vyvážené stravy, fitness.

'; 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'; } }
Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).
'; 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 »