Kdy si s bolestí břicha poradíte sami a kdy se raději vydat k lékaři

13. 3. 2023

Sdílet

Žena ve svetru a džínách leží stočená na boku, protože ji bolí břicho
Autor: Depositphotos
Bolest břicha a píštěle mohou být projevem Crohnovy choroby
Asi každý z nás někdy zažil pocit těžkého žaludku, křeče nebo svíravou bolest břicha. Jde o běžné problémy způsobené nevhodnou stravou či dietní chybou, které obvykle rychle odezní. Častá bolest břicha ale rozhodně není normální. Může jít o projev závažnějších onemocnění, jako jsou Crohnova choroba, celiakie, zánětlivé onemocnění střev či dokonce rakovina.

Příčiny bolesti břicha

Občasné bolesti břicha nemusí poukazovat na žádný závažnější zdravotní problém. Nejčastěji se objevují v souvislosti s nevhodnou životosprávou. Bolest břicha přitom může být podpořena:

  • konzumací tučné a špatně stravitelné potravy,
  • hltáním a mluvením při jídle,
  • nedostatečným rozmělněním potravy,
  • hladověním,
  • přejídáním se,
  • kouřením,
  • nadměrnou konzumací kávy a alkoholu.

Za bolestí břicha může stát také stres nebo vážná nemoc. Zde se můžete setkat se členěním na:

  • funkční bolest břicha,
  • organickou bolest břicha.

Funkční bolest břicha

S funkční bolestí břicha se setkává velká část pacientů. Bolesti se mohou objevovat bez zjevné příčiny a je zde velmi těžké vysledovat, co je jejich spouštěčem. Funkční bolesti břicha se někdy říká bolest břicha ze stresu. Projevuje se svíravou bolestí v okolí žaludku a někdy postihuje dokonce celou oblast břicha. Úzce souvisí se stresem, strachem, depresí, úzkostmi či trémou a většinou je vázána na určité stresové podněty.

Jak se rychle zbavit průjmu. Průjem může vyvolat dietní chyba, infekce i vážná nemoc Přečtěte si také:

Jak se rychle zbavit průjmu. Průjem může vyvolat dietní chyba, infekce i vážná nemoc

K bolesti břicha zde u většiny pacientů přispívají špatné stravovací návyky (nepravidelnost v jídle, hltání, jedení ve spěchu) a celkově nezdravý životní styl. Proto je často trápí i nadýmání, nepravidelnost stolice, zácpa a další trávicí obtíže.

Organická bolest břicha

U organické bolesti břicha je příčinou obtíží jiné probíhající onemocnění. Může jít nejen o zánět slinivky, žlučníkové kameny, žaludeční nebo dvanácterníkové vředy, poleptání jícnu či záněty trávicího ústrojí, ale také o rakovinu střev, konečníku, jícnu a žaludku. Bez vyšetření lékařem a nasazení správné léčby v tomto případě bolest sama nezmizí. [1, 2, 3, 4]

Druhy bolestí břicha

Bolesti břicha mohou mít rozličný charakter. Podle tohoto kritéria je dělíme do čtyř skupin:

  • ostré (somatické),
  • tupé (viscerální),
  • křečovité,
  • nadýmání (plynatost).

Ostrá bolest břicha

Jedná se o píchání, bodání a intenzivní akutní bolesti, které se většinou soustředí do jednoho konkrétního místa. Bolest je ohraničená a patrná při pohmatu. Může se objevit znenadání a většinou má stupňující se charakter. Pokud se k tomuto stavu přidruží i další komplikace (horečka, zrychlený puls, poruchy vědomí), jedná se o situaci, která vyžaduje okamžitou lékařskou pomoc.

Tupá bolest břicha

U tupé bolesti není snadné určit, odkud přesně vychází. Pacienti ji popisují spíše jako silný soustavný tlak ve střední části břicha. Tento problém většinou do několika dní odezní. Pokud se ale vrací nebo přetrvává déle, měl by člověk vyhledat lékaře.

Křečovitá bolest břicha

Křeče v břiše mohou postihovat buď celé břicho, nebo jen určitou část. Projevují se svíravou křečovitou bolestí, která je velice nepříjemná. Mnohdy také pacientovi brání v narovnání se, protože při předklonu pociťuje určitou úlevu.

Co se děje v těle, když zvracíme? Je to nečekaně složitý proces, řídí ho mozek Přečtěte si také:

Co se děje v těle, když zvracíme? Je to nečekaně složitý proces, řídí ho mozek

Nadýmání (plynatost)

Nepříjemné pocity těžkého, plného a nadmutého břicha se mohou dostavit například po konzumaci nadýmavého jídla, v důsledku potravinové intolerance nebo jako doprovodný příznak některého z onemocnění trávicího traktu. Plynatost může být zapříčiněna také užíváním určitých léčiv. Zvýšené množství plynů ve střevech je provázeno křečemi, pocitem silného tlaku, kručením ve střevech a říháním. [5, 6, 7, 8, 9]

Bolesti břicha dle lokalizace

Bolest může postihovat různé oblasti břišní dutiny. Bolest celého břicha není úplně obvyklá, většinou se soustředí do specifických bodů. Pacienti si nejčastěji stěžují na:

  • bolest na levé straně břicha,
  • bolest břicha na levé straně dole,
  • bolest na levé straně břicha pod žebry,
  • bolest na pravé straně břicha,
  • bolest břicha a zad,
  • bolest břicha nahoře uprostřed,
  • bolest břicha nad pupkem,
  • bolest břicha pod pupkem,
  • bolest břicha vlevo od pupku,
  • bolest břicha kolem pupku.

Bolest břicha na levé straně

Pokud se objeví bolest břicha vlevo těsně pod žebry, může jít o projev pankreatitidy, žaludeční vředy či o poruchy sleziny. Akutní bolest, která se objeví náhle a je velice silná, vyžaduje okamžitou hospitalizaci pacienta.

Bolest břicha na levé straně dole (v levém podbřišku) může signalizovat střevní chřipku nebo onemocnění tlustého střeva a konečníku. Také bývá spojována s nemocemi močového ústrojí. Bolest břicha vlevo dole u mužů někdy upozorňuje na onemocnění prostaty, u žen se může jednat o problémy s vaječníky.

Bolest břicha na pravé straně

Bolest břicha vpravo pod žebry je typická při potížích se žlučníkem. Většinou jde o velice ostrou bolest, která se nejprve objeví uprostřed břicha a vystřeluje vpravo. Může ale vyzařovat i do zad nebo k pravé lopatce. Pacienty bývá popisována jako bodavá a intenzivní, někteří si stěžují i na nepříjemný pocit tlaku. V případě žlučníkového záchvatu ji provází pocení, malátnost a nevolnost. U tupé bolesti v pravém podžebří může jít o problémy s játry.

Bolest břicha vpravo dole (v pravém podbřišku) se objevuje při zánětu slepého střeva. Začíná nejprve v pravém nadbřišku a kolem pupku, odkud se postupně přesune do pravého podbřišku. [10, 11, 12, 13]

Bolest břicha v těhotenství

Bolesti břicha se objevují u mnoha těhotných žen. Lehké tvrdnutí břicha doprovázené mírnými bolestmi není ničím výjimečným, pokud se nepřidruží vážnější komplikace. Jestliže se u nastávající maminky objeví silné neustávající bolesti, horečka, bolesti při močení, závratě nebo začne vaginálně krvácet, musí okamžitě vyhledat lékařskou pomoc. [14, 15]

Bolest břicha při menstruaci

Menstruace je pro mnoho žen nepříjemnou částí cyklu i proto, že je trápí bolesti a křeče v podbřišku. U některých žen se dostavuje i nevolnost a pocit únavy. Pokud jsou bolesti snesitelné a nelimitují ženu v každodenním životě, může si ulevit přikládáním teplých obkladů na břicho, popíjením teplých nápojů a užíváním analgetik.

V případě silných bolestí břicha doprovázených zvracením, silnými bolestmi hlavy a dalšími vážnými problémy je potřeba zbystřit a konzultovat zdravotní stav s gynekologem. [16, 17]

S menstruací za zábavou? Proč ne, stačí vědět, nač si dát pozor Přečtěte si také:

S menstruací za zábavou? Proč ne, stačí vědět, nač si dát pozor

Bolest břicha po jídle

Pokud pravidelně konzumujete tučné, smažené a těžko stravitelné pokrmy, jistě vás nepřekvapí, že se někdy dostaví křečovitá bolest břicha po jídle. Jestliže se bolesti objevují téměř po každém jídle, může to upozorňovat na problémy se žlučníkem. Pacienti s onemocněním žlučníku by měli dodržovat žlučníkovou dietu. [18, 19]

Bolest břicha u dětí

U dětí se orgánové uspořádání v břišní dutině liší, proto vnímají bolesti břicha trochu jinak než dospělí. Mezi nejčastější příčiny bolestí bříška patří zažívací problémy, zácpa, střevní záněty nebo přítomnost parazitů. Častá bolest břicha u dětí by neměla být zanedbána, proto neváhejte s návštěvou lékaře, pokud si dítě neustále stěžuje.

Miminka a kojence často trápí zaražené větry. Snadno je identifikujete podle toho, že je děťátko neklidné, kope nožičkami, převaluje se, kroutí se a kňourá. [20, 21]

Léčba bolesti břicha

Co na bolesti břicha funguje nejlépe? Nejprve je důležité odhalit příčinu bolesti. Je na lékaři, aby vyhodnotil, zda jsou pacientovy potíže způsobeny pouze špatnou životosprávou, nebo je vyvolává nějaké závažnější onemocnění. Pokud jsou potíže mírné, většinou stačí upravit jídelníček (vyhýbat se tučným jídlům, jíst dostatek vlákniny, pít hodně tekutin, hýbat se a vyzkoušet přírodní prostředky na podporu zažívání).

Domácí léčba bolesti břicha

  • Čaj na bolest břicha – lze si zakoupit hotovou čajovou směs, nebo vyzkoušet fenyklový, anýzový, koriandrový či meduňkový čaj,
  • kmínový odvar – kmín se doporučuje používat i jako koření při vaření,
  • teplé a studené obklady.

Někdy může pomoct i volně prodejný lék na bolest břicha. Některé léky fungují jako blokátory protonové pumpy (blokují sekreci kyseliny chlorovodíkové v žaludku), jiné působí proti nadýmání.

Kdy vyhledat lékaře?

S okamžitou návštěvou lékaře neváhejte, pokud se objeví akutní bolesti břicha doprovázené:

  • horečkou
  • malátností,
  • zrychlením tepu a dechu,
  • ztrátou orientace v času a prostoru,
  • zvracením.

Návštěvu lékaře byste neměli odkládat ani v případě, že má bolest břicha dlouhodobý charakter a váš stav se nezlepšuje. Chronické problémy se žaludkem, které trvají déle než 3 měsíce, většinou souvisí s nějakým závažnějším onemocněním trávicího traktu. Může jít například o zánětlivé onemocnění nebo celiakii. [22, 23, 24]

Zdroje: mayoclinic.org, calmclinic.com, ncbi.nlm.nih.gov, msdmanuals.com, webmd.com, medlineplus.gov, my.clevelandclinic.org, healthdirect.gov.au, solen.cz, medicinapropraxi.cz, cpzp.cz

Co způsobuje bolesti břicha?
Bolesti břicha mohou být způsobeny nejen špatnou životosprávou, dietními chybami a stresem, ale také závažným onemocněním. Proto se je nevyplácí bagatelizovat, zejména pokud jde o akutní silné bolesti nebo chronickou neustávající bolest.
Může se objevit bolest břicha ze stresu?
Ano, jde o takzvanou funkční bolest břicha, která se objevuje v důsledku prožívání stresu, strachu, úzkosti, depresí nebo trémy. Pacienti pociťují svíravou bolest v okolí žaludku, případně i v celém břiše.
Co pomáhá na bolest břicha?
Záleží na příčině, kterou musí určit lékař. Pokud jde o mírné bolesti způsobené špatnou životosprávou nebo stresem, vyplatí se zaměřit na úpravu jídelníčku a stravovacích návyků, snažit se hýbat, užívat určité bylinky a pít dostatek tekutin.

Autor článku

Copywriterka na volné noze spolupracující s Vitalia.cz. Po dokončení studia laboratorní diagnostiky ve zdravotnictví pracovala na oddělení klinické biochemie a hematologie.

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