Mají moc velká prsa. Mohou běhat a cvičit?

27. 9. 2019

Sdílet

Že mohou velká prsa ženám přinášet třeba i zdravotní komplikace, především v podobě bolestí zad, je jasné. Často jsou důvodem i toho, že se přírodou velmi obdařené ženy vyhýbají fyzické aktivitě.

Aby také ne – různé biomechanické studie ukázaly, že třeba běh bez podprsenky znamená, že prsa „poskakují“ o osmnáct i více centimetrů, a navíc se houpou ze strany na stranu. Sportu se ale nemusí vyhýbat nikdo; chce to jen zvolit ten správný a ke své „výbavě“ tu nejlepší výbavu k tomu.

Neběhám. Dokonce i chůze vadí

Vědci z Biomechanické výzkumné laboratoře při australské univerzitě Wollongong prováděli rozsáhlý výzkum mezi stovkami žen. Řešili pohybovou aktivitu v souvislosti s BMI a také velikostí prsou. Výsledek? Čím větší prsa, tím menší fyzická aktivita. Také typ vykonávané aktivity se měnil – například jen velmi málo žen s velmi velkými prsy běhalo. Řada žen s velkým poprsím také uváděla, že jim prsa brání ve snadném cvičení, a to i když jde o aktivity jako chůze či plavání: 

„Častými problémy, které jsou spojeny s velkým poprsím, jsou bolesti zad, které mohou být lokalizovány ve všech oddílech páteře,“ uvádí hlavní fyzioterapeutka FYZIOkliniky Iva Bílková, co může odrazovat tyto ženy od sportu. „Mezi nejčastější oblasti spadá krční a hrudní páteř, na které je při stoji, v sedě i při chůzi vyvíjen nepřetržitý tah. Tím se tyto svaly jednoduše přetěžují, což způsobuje samotnou bolest. Pokud není těmto bolestem věnována pozornost, mohou být dále ovlivněny i nižší oddíly páteře a celkové nastavení postury těla. Navíc nepřetržitým přetěžováním svalů krční páteře mohou vznikat i bolesti hlavy či ramen.“

Cvičit s vyvinutým hrudníkem

A to ještě ty ženy „nic nedělají“, chtělo by se dodat. Že ale všechno jde, jen se musí chtít, dokazuje třeba Jana Havrdová, prezidentka Svazu aerobiku a fitness FISAF.cz:

„V dnešní době, kdy jsou k dispozici dokonalé funkční sportovní podprsenky, může sportovat každá žena. S dobrou podprsenkou může dělat všechny sporty včetně běhání, o němž si vyvinutější ženy myslí, že je pro ně naprosté tabu,“ říká Jana Havrdová a přidává osobní zkušenost. „Většina žen, které kojily, si jistě pamatuje život s velkými prsy. Při každém poskoku si prsa automaticky podržíte, aby ‚neposkakovala‘, při cvičení jógy máte zase v obrácených pozicích (například svíčka), pocit, že vás vlastní poprsí udusí. Osobně to znám velmi dobře, po třech dětech a téměř sedmi letech kojení mi aktuálně zůstala prsa o velikosti 70 F.“

Rozhovor – Jana Havrdová: Základ je chodit pěšky 

Běh není tabu

Běhání je jeden z nejoblíbenějších sportů dnešní doby, který je ale pro ženy s velkým poprsím tím prvním, který ze seznamu aktivit škrtají. Přitom to není nutné – jde především o výběr podprsenky. 

„Ta by měla zmírnit, či úplně eliminovat bolest prsou a také by měla snížit namáhání citlivé vazivové tkáně prsou, což by mohlo vést až ke vzniku strií či povislých ňader. Vhodná sportovní podprsenka také může zabránit nechtěným oděrkám či otlakům a v neposlední řadě také poskytuje komfort při cvičení,“ radí Iva Bílková, čím začít.

A doporučuje také způsob, jak si běh předem neznechutit a nepřivodit si nepříjemné bolesti zpočátku: „Do běhání bych přecházela postupně – začít si rychlou chůzí, poté zařadit indiánský běh, tedy chůzi v kombinaci s během. A až poté by bylo vhodné přejít na ‚regulérní‘ běhání.“

TIP: „Příliš horlivý běžec si brzy zničí zdraví,“ říká trenér

V tréninku i s velkými prsy

Iva Bílková je v otázce sportů vhodných pro vyvinuté ženy především zastánkyní chůze. A obecně jakéhokoliv cvičení, které rovná páteř a koriguje postavení ramen do šíře, vzad a dolů:

„Vhodná je třeba jóga, pilates, ale také společenský tanec,“ dodává fyzioterapeutka a jako skvělou aktivitu, která odlehčí, kde to bude potřeba, doporučuje využít vodu. „Volila bych i plavání či cvičení ve vodě, jako je aqua aerobic. Vztlaková síla ve vodě totiž zmenšuje váhu a pohyb prsou.“

Na tom se ostatně shoduje s australskými vědci, kteří poukazují také na správný výběr plavek se zabudovanou pevnou podprsenkou.

„U žen s velkým poprsím jsou ale problematičtější sporty s větší mírou poskoků či sporty kontaktní,“ říká Iva Bílková, co raději vynechat. „Je vhodné, aby žena nosila sportovní podprsenku, která stáhne prsa k hrudníku, a při doskocích, běhu nebo nárazu neumožní prsům pohyb, tedy tah a váhu na šíjové a hrudní svaly a měkké tkáně prsou.“

Podprsenka pro spokojený pohyb

Protože vhodná podprsenka je naprosto zásadní součástí sportovní výbavy, vybírejte ji pečlivě.

„Sportovní modely mají široká ramínka a vysoký plný střih. Bradavky jsou vždy chráněné jemnou výztuží a šíře zapínání počítá se zátěží. Sportovní podprsenky jsou vyrobeny z funkčních materiálů pomáhajících odvádět pot od těla, často mají v oblasti hrudní kosti systém odvětrání, který brání nepříjemnému zapocení. Chrání záda, šetří ramena, a to nejdůležitější, rozloží váhu prsou do středu zad, a tím pomáhají ke správnému držení těla. Proto by také měly mít možnost křížení ramínek. Díky tomu mají prsa třeba i při běhání pevnou podporu a drží pevně u hrudníku,“ vysvětluje Helena Konarovská ze společnosti Le Chaton, která u nás patří k největším odborníkům na dámské prádlo. 

Galerie: 10 tipů pro správnou podprsenku

Jak poznat tu správnou velikost, radí Iva Bílková: „Poznáte to tak, že si pod ramínka a spodní lem dáte dva prsty, a podprsenka by neměla škrtit. Neměla by omezovat v dýchání, pohybu, ale přitom by měla maximálně eliminovat pohyb prsou a zajišťovat jim potřebnou podporu.“

A nezdráhejte se při výběru vyzkoušet podprsenku doslova v praxi. Poskočte si, ukloňte se – to vše pomůže zjistit, jak se v ní budete cítit při sportovních aktivitách.

Nehrbit se a neschovávat prsa

Bolesti zad a další potíže se ale mohou objevit, i když žena s velkými prsy pravidelně sportuje. Nejlepší prevencí je hlídat držení těla celý den. To bude mít ostatně i optický efekt:

„Každý člověk vypadá lépe, mladší a optimističtější, když stojí hezky rovně, a ne se svěšenými rameny a ‚hrbem‘ na zádech,“ říká Jana Havrdová. Právě ženy s velmi vyvinutým poprsím mají podle ní sklon hrbit se a prsa schovávat. Zkracují se jim tak prsní svaly a přední hlava ramenního svalu, uvolňují se mezilopatkové svaly. „Proto je důležité tyto svaly posilovat a prsní a přední hlavu ramenního svalu protahovat,“ upozorňuje trenérka.

Iva Bílková pak přidává tipy na vhodné cviky jako nejlepší prevenci: „Určitě to jsou všechny ty, které posilují střed těla a aktivují hluboký stabilizační systém, který při dostatečném zpevnění napomáhá ke zlepšení celkového nastavení těla nejen v prostoru, ale i při pohybu,“ radí fyzioterapeutka. „Důležité je pracovat s přetěžovanými svaly i formou relaxace a protahováním například krčních svalů pro ovlivnění bolesti hlavy i samotného krku. U cvičení lze využít i různých cvičebních pomůcek v podobě overballu či cvičební gumy.“

Pokud ženu ale přes to všechno trápí trvalé bolesti hlavy a šíje, měla by se poradit s lékařem. Ten totiž může doporučit operativní zmenšení prsou ze zdravotních důvodů, které je hrazeno z veřejného zdravotního pojištění.

Odborná spolupráce:

Mgr. Iva Bílková

Vedoucí fyzioterapeutka Fyziokliniky v Praze. Vystudovala obor Fyzioterapie na FTVS UK a dále obor se specializací na funkční poruchy pohybového aparátu. Zabývá se léčbou bolestí zad, kloubů, pracuje i s klienty po úrazech kostí, svalů a šlach. Věnuje se léčbě dospělých i dětí.


Mgr. Jana Havrdová

Prezidentka Českého svazu aerobiku a fitness FISAF.cz, prezidentka České komory fitness, jedna ze zakladatelek kampaně Česko se hýbe, moderátorka magazínu ČT Sama doma, propagátorka zdravého životního stylu a pravidelné fyzické aktivity v každodenním životě.

Autor článku

Zaměřuje se především na problematiku zdravého životního stylu, sportu, nemocí a jejich řešení.

'; 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 »