Premenstruační syndrom způsobuje tělesné i psychické obtíže. Jak ho nejlépe zvládnout?

26. 2. 2021 15:25
přidejte názor
Autor: Shutterstock

Trápí vás před každou menstruací silné bolesti v podbřišku, pocit nafouklosti nebo celková podrážděnost? Na vině je pravděpodobně premenstruační syndrom (PMS), s nímž se potýká velké množství žen. Přestože tyto obtíže nejsou klasifikovány jako samostatná nemoc, mohou pacientky omezovat v každodenních činnostech. Jak tento stav léčit a zmírnit jednotlivé příznaky?

Co je premenstruační syndrom?

Co se dozvíte v článku
  1. Co je premenstruační syndrom?
  2. Příčiny premenstruačního syndromu
  3. Jaké má premenstruační syndrom příznaky?
  4. Diagnostika
  5. Léčba premenstruačního syndromu

Jak již samotný název obtíží napovídá, premenstruační syndrom (PMS) je stav, který se u pacientek vyskytuje krátce před začátkem menstruace. Nepříjemné zdravotní problémy se objevují zhruba 7 až 10 dní před nástupem krvácení a mohou trvat různě dlouhou dobu. Mívají přitom fyzický i psychický charakter a se začátkem menstruace následně mizí. Bolesti ovšem někdy přetrvávají ještě v začátcích krvácení.

Ačkoliv obtíže spojené s premenstruačním syndromem trápí každý měsíc až 80 % žen, ze zdravotnického hlediska momentálně nejsou považovány za samostatnou nemoc a někdy proto těmto komplikacím není přikládán příliš velký důraz. Zhruba u 15–25 % pacientek ovšem problémy bývají tak závažné, že narušují běžné činnosti a znemožňují jim normální fungování.

Příčiny premenstruačního syndromu

Přesný mechanismus, kvůli kterému se u některých žen objevuje premenstruační syndrom, dosud nebyl zcela objasněn. Lékaři se však domnívají, že zde hraje roli celá řada různých vlivů a jedná se tedy o multifaktoriální poruchu. Na vině je však s největší pravděpodobností hormonální nerovnováha v druhé polovině cyklu (po ovulaci) společně s nastupující menstruací.

Jakmile se menstruační cyklus překlene do své druhé poloviny, v ženském těle výrazně klesá hladina progesteronu, což může v kombinaci se zvýšenou hladinou estrogenu způsobit změny rovnováhy mozkových chemických látek. Ty pak ovlivňují nejen psychický stav pacientky, ale způsobují také bolestivost a zvýšenou touhu po sacharidech.

Kromě toho ve druhé polovině menstruačního cyklu dochází také k přirozenému zvýšení hladiny prolaktinu, což může způsobit rozvoj typických tělesných a psychických změn, které s premenstruačním syndromem souvisí. Jedná se například o zadržování vody v tkáních nebo zvýšenou citlivost prsou. Příznaky PMS se ovšem mohou rozvinout i vlivem nízké hladiny serotoninu.

Jaké má premenstruační syndrom příznaky?

Jednotlivé projevy včetně jejich intenzity se mohou u pacientek výrazně lišit. Zatímco některé si stěžují pouze na mírné bolesti v podbřišku, na celkovou únavu nebo třeba na zvýšenou chuť k jídlu, u jiných mohou být symptomy velice výrazné, což následně znemožňuje výkon běžných aktivit nebo třeba zaměstnání.

Podle lékařů existuje obrovské množství různých tělesných a psychických příznaků, které mohou být s premenstruačním syndromem spojené. Kromě charakteristických bolestí břicha často doprovází premenstruační syndrom teplota, nevolnost, deprese, bolest prsou nebo třeba zvýšená citlivost a ztráta energie. Nejčastěji se přitom jedná o potíže, které jsou vyjmenované níže.

Fyzické příznaky premenstruačního syndromu

  • bolesti břicha a křeče v podbřišku,
  • bolesti hlavy, svalů a kloubů,
  • bolesti zad a celková únava,
  • napětí v prsou a bolestivé bradavky,
  • zvýšená teplota a pocit vyčerpání,
  • zadržování vody a pocit nafouklosti,
  • poruchy spánku či zvýšená potřeba spánku,
  • nevolnost, trávicí obtíže a zvracení,
  • oběhové problémy, otékání kotníků a prstů,
  • zvýšená chuť k jídlu, především na sladké,
  • zhoršení projevů akné a dalších kožních obtíží,
  • pokles sexuální touhy.

Psychické příznaky premenstruačního syndromu

  • výkyvy nálad a přecitlivělost,
  • celková podrážděnost,
  • agresivita, zlost, vztek,
  • úzkostné stavy,
  • deprese,
  • pokles zájmu o běžné činnosti,
  • bezdůvodné návaly pláče,
  • snížené sebevědomí,
  • nesoustředěnost, zhoršená koncentrace,
  • negativní emoce a psychické vypětí.

Jestliže se u pacientky pravidelně dostavuje velice silný premenstruační syndrom s výrazným vlivem na psychiku, což zahrnuje například rozvoj depresí nebo úzkostných stavů, lékaři pak hovoří o premenstruační dysforické poruše (PMDD). Ta trápí zhruba 3–8 % žen a je nejvíce patrná během luteální fáze menstruačního cyklu.

Mezi dominantní příznaky premenstruační dysforické poruchy patří změny nálad a další emoční výkyvy, které negativně zasahují do sociálního života a osobních vztahů pacientek, přičemž nezřídka se objevují také pocity hlubokého smutku a bezmoci, záchvaty paniky, apatie, přejídání se nebo konflikty s okolím. Pokud se opravdu jedná o tento problém, je nutné vyhledat lékařskou pomoc a zvážit terapii prostřednictvím psychofarmak.

Diagnostika

Většina pacientek, které trápí výkyvy nálad, pravidelné bolesti v podbřišku před menstruací a další podobné obtíže, nepochybuje o tom, že za tyto problémy může právě premenstruační syndrom. Časová závislost na menstruačním cyklu je pak důležitým signálem také pro lékaře, který se na správnou diagnostiku zdravotních komplikací soustředí.

Vzhledem k tomu, kolik příznaků se s premenstruačním syndromem pojí, se ovšem přesná diagnóza určuje poměrně obtížně. Intenzita a četnost symptomů se totiž u každé pacientky výrazně liší a lékař by měl dbát také na vyloučení jiných onemocnění. Z toho důvodu je důležitá anamnéza pacientky, popis jednotlivých projevů a případně i další vyšetření.

Léčba premenstruačního syndromu

Jelikož se obtíže vracejí pravidelně každý měsíc, pacientky se většinou ptají, zda existuje pro premenstruační syndrom léčba a jak je možné zmírnit premenstruační syndrom a jeho příznaky, ať už jsou psychického, či fyzického rázu, nebo se dokonce jedná o kombinaci obojího. V některých případech je možné zbavit se obtíží svépomocí, jindy je však nutná asistence lékaře.

Vzhledem k tomu, že přesné příčiny rozvoje těchto zdravotních komplikací nejsou známé, není možné premenstruační syndrom léčit systematicky. Pacientkám se doporučuje hlavně klid, odpočinek a dostatek spánku, přičemž dále existují různé možnosti terapie, které vychází z individuálních příznaků, jejich četnosti a stupně intenzity. Pomoci může změna stravování, cvičení, ale i léky.

Farmakologická léčba PMS

V některých případech mohou premenstruační syndrom potlačit léky. Pokud jsou například bolesti hlavy nebo křeče v podbřišku příliš silné, je možné sáhnout po medikamentech proti bolesti, které se označují také jako analgetika. Tento krok by však měl být spíše výjimečný, a pokud bolest nepolevuje, je nutné dlouhodobější užívání léků konzultovat s ošetřujícím lékařem.

Při návštěvě ordinace může lékař doporučit také podávání hormonů žlutého tělíska a gestagenů, což se provádí cyklicky, vždy před nástupem očekávaných obtíží. Příznakům premenstruačního syndromu mohou zabránit také léky bránící ovulaci, tedy prostředky hormonální antikoncepce, které potlačují tvorbu určitých endogenních hormonů. Stejně jako v předchozím případě je však nutné poradit se o užívání vhodné antikoncepce s lékařem.

Ženám, které se vlivem premenstruačního syndromu potýkají s bolestmi prsou a zadržováním vody v těle, mohou pomoci také léky určené k odvodnění organismu označované jako diuretika. Tyto medikamenty však mohou mít celou řadu vedlejších účinků a v některých případech mohou vést k rozvoji návykového efektu, a proto se užívají pouze po dohodě s lékařem.

Další možnosti léčby

Pokud nechcete hned sahat po farmakologických přípravcích, je možné, že ke zmírnění premenstruačního syndromu pomohou také různá režimová opatření. Obecně je vhodné pít dostatečné množství tekutin, omezit příjem alkoholu a vynechat kouření. Důležitý je ovšem i dostatek spánku a v případě neustávajících obtíží také klid a relaxace.

Některým ženám pak pomáhá sport nebo pravidelná fyzická aktivita, například v podobě procházek. Pohyb totiž podporuje správný průtok krve v organismu a zároveň zmírňuje křeče v děloze, což může mít pozitivní vliv na ženské tělo. Díky tomu pak mohou nepříjemné bolesti alespoň částečně vymizet. Dobrý vliv ovšem mají i různá relaxační cvičení (například jóga).

Fyzickou i psychickou úlevu může pacientkám poskytnout také masáž, která pomůže uvolnit ztuhlá záda. Velké množství žen si ovšem pochvaluje i lehké pohupování nebo cvičení na relaxačních míčích, které se soustředí na uvolnění či protažení svalů, a od bolesti někdy pomohou také různé hřejivé nebo chladivé krémy.

Ke zmírnění projevů premenstruačního syndromu může napomoci také změna jídelníčku. Lékaři doporučují konzumaci vyvážené stravy, která je bohatá na vitamíny a minerály (vitamín B6, E, vápník). Důležité je zařadit dostatečné množství ovoce či zeleniny a naopak omezit množství cukru, soli nebo třeba kofeinu. Součástí jídelníčku by pak měl být i dostatek kvalitních bílkovin.

Pro zmírnění bolestí se v poslední době stále více mluví o užívání CBD.

Některé pacientky doporučují vyzkoušet bylinky na premenstruační syndrom, které by měly pomoci alespoň částečně ulevit od potíží. Jedná se například o tyto rostliny:

Třezalka je známá tím, že zbavuje stresu a úzkosti, uvolňuje křeče trávicího ústrojí a působí proti žaludečním a střevním obtížím. Kontryhel pak zklidňuje organismus, upravuje nadměrné krvácení, a výborně tlumí menstruační bolesti. Pokud pacientky trápí nadýmání, vyplatí se vyzkoušet také kmínový čaj.

Zdroje: nzip.cz, wikiskripta.eu

Co je premenstruační syndrom?
Jako premenstruační syndrom se označuje stav, který pacientky trápí krátce před začátkem menstruace (zhruba 7–10 dní). Obtíže přitom mohou trvat různě dlouhou dobu, mívají fyzický i psychický charakter a spolu se začátkem krvácení postupně mizí. V současné době se s tímto syndromem potýká údajně až 80 % žen, přičemž zhruba u 15–25 % z nich jsou zdravotní komplikace tak vážně, že jim znemožňují vykonávání běžných činností.
Jaké má premenstruační syndrom fyzické příznaky?
Mezi nejčastější tělesné příznaky premenstruačního syndromu patří bolesti břicha, křeče v podbřišku, bolesti hlavy, zad, svalů a kloubů, celková únava nebo třeba napětí v prsou. Kromě toho si pacientky stěžují také na zvýšenou teplotu, zadržování vody v těle a pocit nafouklosti, trávicí obtíže, otékání kotníků a prstů, zhoršení projevů akné, pokles sexuální touhy nebo zvýšenou chuť k jídlu.
Jaké jsou psychické příznaky premenstruačního syndromu?
K typickým projevům premenstruačního syndromu se řadí výkyvy nálad, přecitlivělost, podrážděnost a celkově psychické vypětí. U pacientek se mohou objevit také úzkostné stavy a deprese, přičemž běžný je i pokles zájmu o normální činnosti. Kromě toho se objevují také další příznaky, jako jsou bezdůvodné návaly pláče, zhoršená koncentrace, negativní emoce nebo dokonce agresivita.
Jaká existuje pro premenstruační syndrom léčba?
Žádná systematická terapie premenstruačního syndromu není dostupná, takže se léčba soustředí především na individuální příznaky, jejich četnost a stupeň intenzity. Pokud jde o farmakologickou léčbu, zde mohou pomoci analgetika, ale někdy lékař doporučí také podávání hormonů žlutého tělíska a gestagenů nebo užívání hormonální antikoncepce. Dále se doporučuje dostatek odpočinku, dodržování pitného režimu, vyvážené stravování, pravidelná fyzická aktivita a případně také bylinky na premenstruační syndrom.
  • Žá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 »