Acidóza bývá předzvěstí jiných chorobných stavů. Jak ji včas rozeznat?

7. 2. 2022 7:30
přidejte názor
Autor: Shutterstock

Potýkáte se s celkovou únavou, bolestmi hlavy, ztrátou chuti k jídlu nebo žaludečními obtížemi? Tento stav může nastat vlivem acidózy neboli překyselení organismu. Ačkoliv ho mnozí přičítají nezdravému životnímu stylu, ve skutečnosti bývají příčiny mnohem závažnější. Jednotlivé symptomy i možnosti léčby pak závisí na tom, zda pacienta trápí metabolická, nebo respirační acidóza.

Překyselení organismu

Co se dozvíte v článku
  1. Překyselení organismu
  2. Acidobazická rovnováha
  3. Příčiny acidózy
  4. Metabolická acidóza
  5. Respirační acidóza

Acidóza, jak se překyselení organismu odborně nazývá, je stav, kdy v lidském těle převažují kyselé látky nad těmi zásaditými. Ačkoliv si to pacienti mnohdy neuvědomují, tento problém je v populaci stále častější. V současné době navíc lidé o překyselení žaludku často uvažují jako o civilizační chorobě a spojují si ho s nezdravým životním stylem, který pacienti vedou.

Čas od času se symptomy doprovázející stav, který lidé označují jako překyselení žaludku, objeví u každého z nás. Spíše než skutečnou acidózu však lidé mívají na mysli jiné trávicí obtíže (například pálení žáhy či gastroezofageální reflux). Ani tyto příznaky nicméně není dobré brát na lehkou váhu, jelikož z dlouhodobého hlediska mohou způsobit rozvoj řady závažných onemocnění.

Acidobazická rovnováha

Pro lidské zdraví je velice důležitá acidobazická rovnováha neboli dynamická rovnováha mezi zásaditými a kyselými látkami v pacientově organismu. Poměr mezi jejich tvorbou a vylučováním by měl být stálý, což je nezbytné pro udržování homeostázy (stabilního vnitřního prostředí). Acidobazická rovnováha má ovšem vliv i na správné fungování metabolismu a činnost enzymů.

Je tedy jasné, že konstantní vnitřní stav je jedním z hlavních předpokladů lidské existence, i když se vnější podmínky neustále mění. Udržování acidobazické rovnováhy, která zároveň určuje rychlost stárnutí, přitom mají na starosti vlastní regulační a kompenzační mechanismy. Ty se však s přibývajícím věkem vyčerpávají a objevují se predispozice ke vzniku acidózy.

Fyziologicky je pH krve a dalších tělesných tekutin udržováno v poměrně úzkém rozmezí, tedy konkrétně od 7,36 do 7,44. Kolísání by mělo být pouze nepatrné, jelikož spolu se změnami pH dochází také ke změnám vlastností bílkovin, aktivity enzymů nebo třeba transportních mechanismů. Větší odchylky pak způsobí narušení regulace metabolických drah a fyziologických pochodů. [12]

Příčiny acidózy

Překyselení organismu nebo překyselení žaludku je mezi lidmi poměrně běžně užívaným termínem, o kterém často hovoří třeba představitelé alternativní medicíny. Acidóza je přitom logickou odpovědí organismu na chemické reakce zvyšující kyselost, jejichž působení je kompenzováno mechanismy, které si s tímto problémem dokáží efektivně poradit (pufrační systémy).

Lidé často tvrdí, že překyselení žaludku bývá způsobeno špatnými stravovacími návyky a nevhodným složením jídelníčku v kombinaci s nedostatkem pohybu, nadměrnou psychickou zátěží a přítomností škodlivin v okolním prostředí, což jsou faktory, které člověk dokáže ovlivnit vlastní snahou a případně alkalickou dietou. Mají však na mysli spíše příčiny zažívacích a dalších podobných obtíží.

Konzumace potravin ve skutečnosti nemá na pH krve vliv, jelikož o jeho regulaci se stará pacientův organismus. Pokud se acidóza skutečně objeví, za její rozvoj bývají zodpovědné vážné poruchy a zdravotní obtíže, jako je například akutní nebo chronické selhání ledvin. Pro udržení správného pH je důležitá hlavně normální činnost ledvin, ale i zdravý dýchací systém.

Pokud dojde k nějakému porušení těchto funkcí, může se u pacienta rozvinout acidóza, a to vlivem zvýšené tvorby kyselin, požitím látek, jež se metabolizují na kyseliny, sníženým vylučováním kyselin nebo zvýšenými ztrátami zásaditých látek. V závislosti na původci obtíží pak lékaři rozlišují metabolickou a respirační acidózu. Tyto problémy by však lidé měli chápat ne jako samostatná onemocnění, ale spíše jako příznak jiných chorobných stavů. [34]

Metabolická acidóza

Metabolická acidóza představuje stav, kdy dochází k poklesu koncentrace standardních hydrogenuhličitanů pod referenční hodnoty, a to buď vlivem jejich ztráty, nebo z důvodu hromadění některého aniontu, jenž hydrogenuhličitany z mineralogramu postupně „vytlačuje“. Na vině přitom bývají tyto faktory:

  • selhání ledvin (akutníchronické) – naruší odstraňování kyselých sloučenin, přičemž dochází k hromadění síranů a fosfátů, pacienty trápí hyperurikémie a při zachování diurézy s tubulárním poškozením selhává reabsorpce hydrogenuhličitanů,
  • laktátová acidóza – pokles pH při hromadění kyseliny mléčné (například vlivem užívání léků na cukrovku, ale také v důsledku septických nebo šokových stavů či rakoviny),
  • diabetická ketoacidóza – objevuje se u diabetiků 1. typu, kteří nejsou léčeni inzulinem, takže jejich tělo není schopné správně zpracovat cukr a získat dostatek energie, což vede k produkci velice kyselých ketolátek,
  • dlouhodobé hladovění – tělu chybí energie z cukrů, takže ji vyrábí za vzniku ketolátek,
  • kontakt s toxickými sloučeninami – například požití velkého množství alkoholu (intoxikace etanolem) či otrava metanolem nebo etylenglykolem,
  • ztráty hydrogenuhličitanových iontů – z důvodu vzácných ledvinových onemocnění, při chronických průjmech nebo třeba vlivem syndromu krátkého střeva. [5, 6, 7]

Jaké má metabolická acidóza příznaky?

Přemýšlíte, jak odhalit acidózu a spolehlivě tak tento stav odlišit od dalších zažívacích obtíží? Přestože má překyselení organismu vliv na činnost celého pacientova těla, ve skutečnosti mohou být jeho symptomy velice nespecifické. Mezi typické příznaky metabolické acidózy se řadí například:

Kromě toho mohou pacienti zaznamenat také dech vonící po ovoci, což je jedním z klasických příznaků ketoacidózy. Pokud si člověk některých z těchto obtíží všimne, měl by co nejrychleji kontaktovat svého lékaře, protože by se jeho stav mohl poměrně rychle a výrazně zhoršit. Mezi možné komplikace se řadí třeba rozvoj osteoporózy, progrese ledvinových onemocnění, ztráta svalové hmoty, vznik endokrinních poruch (cukrovka), ale i šok nebo kóma. [8, 9]

Léčba metabolické acidózy

Pokud pacient zaznamená některé z výše zmíněných příznaků, lékaři obvykle provádějí soubor testů, pomocí kterých je možné potvrdit podezření, že se skutečně jedná o metabolickou acidózu. Jde například o vyšetření krevních plynů (měření pH krve a hladiny kyslíku i oxidu uhličitého v krvi), testy moči či anionové okno, což je test, jenž měří chemickou rovnováhu v krvi.

Pokud se skutečně jedná o metabolickou acidózu, léčba se vždy zaměřuje na odstranění obtíží, které tento zdravotní problém vyvolaly. Pokud bude terapie úspěšná, pH se postupem času normalizuje a acidobazická rovnováha se ustálí. Po doporučení ošetřujícího lékaře může pomoci například:

  • detoxikace (pokud je na vině otrava drogami či alkoholem),
  • podání inzulínu (pokud jde o diabetickou ketoacidózu),
  • infuze podávané nitrožilně nebo jiné vhodné léky (například antibiotika),
  • bikarbonáty (užívání hydrogenuhličitanu sodného nebo citrátu sodného),
  • dieta (zvýšený příjem ovoce a zeleniny, který sníží kyselou zátěž v pacientově těle). [10, 11, 12]

Postihla vás někdy acidóza?

Respirační acidóza

V tomto případě je acidóza způsobena nerovnováhou mezi produkcí oxidu uhličitého a jeho vylučováním. Nadbytek CO2 pak mívá na svědomí snížení pH pacientovy krve a dalších tělesných tekutin, které jsou z toho důvodu příliš kyselé. Lékaři přitom rozlišují dva specifické stavy, a to respirační acidózu akutní a chronickou.

Akutní respirační acidóza se objevuje vlivem náhlého zvýšení hladiny oxidu uhličitého, což se odborně označuje jako hyperkapnie. Nástup obtíží je tedy rychlý a vyžaduje okamžitou lékařskou pomoc. Bez vhodné terapie se příznaky budou postupně zhoršovat a mohou pacienta dokonce ohrozit na životě.

Chronická respirační acidóza se naopak vyvíjí postupně, přičemž u pacientů dochází ke chronickému snížení efektivní alveolární ventilace. Tělo se zvýšené kyselosti obvykle přizpůsobí, takže například ledviny začnou produkovat více bikarbonátu. Roste také počet erytrocytů a stoupá hemoglobin, ale žádné viditelné příznaky nemusí být na první pohled patrné.

Možné příčiny respirační acidózy:

Příznaky respirační acidózy

Ačkoliv někdy nemusí být patrné žádné obtíže (hlavně u chronické respirační acidózy), v případě akutní respirační acidózy může pacient zaznamenat rozvoj mnoha symptomů. Sem patří například:

  • dušnost,
  • bolest hlavy,
  • rozmazané vidění,
  • sípavý dech,
  • neklid a úzkost,
  • cyanóza.

Bez nasazení vhodné léčby se pak mohou objevit také další komplikace, jako je celková únava a ospalost, letargie, delirium, zmatenost, mimovolní pohyby a záškuby svalů nebo záchvaty. Kromě toho si lidé u pacienta všímají změn osobnosti a v nejhorším případě je důsledkem respirační acidózy komatózní stav. Co se týče projevů chronické respirační acidózy, ty mohou zahrnovat:

  • ztrátu paměti,
  • potíže s koordinací,
  • polycytémii,
  • plicní hypertenzi,
  • ospalost,
  • bolesti hlavy,
  • spánkovou apnoe,
  • srdeční selhání. [15, 16]

Léčba respirační acidózy

Prvním krokem k nastavení vhodné léčby je samozřejmě určení správné diagnózy. K odhalení respirační acidózy lékařům slouží řada různých testů, které zahrnují třeba vyšetření krevních plynů, vyšetření elektrolytů a vyšetření funkce plic. Sem patří hlavně spirometrie, testování objemu plic, vyšetření difuzní kapacity plic, ale i spiroergometrie. Pro potvrzení diagnózy ovšem doktor může provést i další testy, jako je rentgen hrudníku nebo kompletní krevní obraz. [17]

Stejně jako v případě metabolické acidózy je i tentokrát po stanovení diagnózy nutné zaměřit se na konkrétní příčinu respirační acidózy. Hyperkapnii by navíc lékaři měli korigovat postupně, protože příliš rychlá alkalizace mozkomíšního moku může způsobit rozvoj záchvatů. Farmakologická terapie zahrnuje například podávání bronchodilatancií (beta-agonisté, anticholinergika, methylxantiny).

V některých případech je nutné, aby lékař provedl zákrok, kterým uvolní pacientovy dýchací cesty a kromě toho se často využívá také umělá plicní ventilace. Při léčbě chronické respirační acidózy pak mohou pomoci také antibiotika (pro léčbu infekce), diuretika (ke snížení nadměrného hromadění tekutin v srdci a plicích), bronchodilatátory nebo kortikosteroidy. [18, 19, 20]

Zdroje: labtestsonline.cz, webmd.com, ncbi.nlm.nih.gov, stefajir.cz, wikiskripta.eu, rehabilitace.info, healthline.com, lekarske.slovniky.cz

  • Žádné názory
  • Našli jste v článku chybu?
'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
'; document.getElementById('outstream-iframe').onload = function () { setupIframe(); } replayScreen = document.getElementById('iinfoOutstreamReplay'); iinfoOutstreamPosition = document.getElementById('iinfoOutstreamPosition'); outstreamContainer = document.getElementsByClassName('outstream-container')[0]; setupReplayScreen(); } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); outstreamDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; videoContent = outstreamDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; if ( location.href.indexOf('rejstriky.finance.cz') !== -1 || location.href.indexOf('finance-rejstrik') !== -1 || location.href.indexOf('firmy.euro.cz') !== -1 || location.href.indexOf('euro-rejstrik') !== -1 || location.href.indexOf('/rejstrik/') !== -1 || location.href.indexOf('/rejstrik-firem/') !== -1) { outstreamDirectPlayed = true; soundAllowed = true; iinfoVastUrlIndex = 0; } if (!outstreamDirectPlayed) { console.log('OUTSTREAM direct'); setUpIMA(true); } else { if (soundAllowed) { const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { console.log('OUTSTREAM sound forbidden'); renderBanner(); }); } } else { renderBanner(); } } } function getWrapper() { let articleWrapper = document.querySelector('.rs-outstream-placeholder'); // Outstream Placeholder from RedSys manipulation if (articleWrapper && articleWrapper.style.display !== 'block') { articleWrapper.innerHTML = ""; articleWrapper.style.display = 'block'; } // Don't render OutStream on homepages if (articleWrapper === null) { if (document.querySelector('body.p-index')) { return null; } } if (articleWrapper === null) { articleWrapper = document.getElementById('iinfo-outstream'); } if (articleWrapper === null) { articleWrapper = document.querySelector('.layout-main__content .detail__article p:nth-of-type(6)'); } if (articleWrapper === null) { // Euro, Autobible, Zdravi articleWrapper = document.querySelector('.o-article .o-article__text p:nth-of-type(6)'); } if (articleWrapper === null) { articleWrapper = document.getElementById('sidebar'); } if (!articleWrapper) { console.error("Outstream wrapper of article was not found."); } return articleWrapper; } function setupDimensions() { outstreamWidth = Math.min(iinfoOutstreamPosition.offsetWidth, 480); outstreamHeight = Math.min(iinfoOutstreamPosition.offsetHeight, 320); } /** * Sets up IMA ad display container, ads loader, and makes an ad request. */ function setUpIMA(direct) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (direct) { adsRequest.adTagUrl = directVast; console.log('Outstream DIRECT CAMPAING advert: ' + directVast); videoContent.muted = true; videoContent.volume = 0; outstreamDirectPlayed = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = outstreamWidth; // adsRequest.linearAdSlotHeight = outstreamHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function setupReplayScreen() { replayScreen.addEventListener('click', function () { iinfoOutstreamPosition.remove(); iinfoVastUrlIndex = 0; outstreamInit(); }); } /** * Sets the 'adContainer' div as the IMA ad display container. */ function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. outstreamDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( outstreamDocument.getElementById('adContainer'), videoContent); } function unmuteAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } } /** * Loads the video content and initializes IMA ad playback. */ function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(outstreamWidth, outstreamHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } /** * Handles the ad manager loading and sets ad event listeners. * @param { !google.ima.AdsManagerLoadedEvent } adsManagerLoadedEvent */ function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } /** * Handles actions taken in response to ad events. * @param { !google.ima.AdEvent } adEvent */ function onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Outstream event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: // This is the first event sent for an ad - it is possible to // determine whether the ad is a video ad or an overlay. if (!ad.isLinear()) { // Position AdDisplayContainer correctly for overlay. // Use ad.width and ad.height. videoContent.play(); } outstreamDocument.getElementById('adContainer').style.width = '100%'; outstreamDocument.getElementById('adContainer').style.maxWidth = '640px'; outstreamDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); // This event indicates the ad has started - the video player // can adjust the UI, for example display a pause button and // remaining time. if (ad.isLinear()) { // For a linear ad, a timer can be started to poll for // the remaining time. intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstreamLastError === 303) { if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } } break; case google.ima.AdEvent.Type.COMPLETE: // This event indicates the ad has finished - the video player // can perform appropriate UI actions, such as removing the timer for // remaining time detection. if (ad.isLinear()) { clearInterval(intervalTimer); } if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } break; } } /** * Handles ad errors. * @param { !google.ima.AdErrorEvent } adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstreamLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { renderBanner(); } } function renderBanner() { if (isBanner) { console.log('Outstream: Render Banner'); iinfoOutstreamPosition.innerHTML = ""; iinfoOutstreamPosition.style.height = "330px"; iinfoOutstreamPosition.appendChild(bannerDiv); } else { console.log('Outstream: Banner is not set'); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoOutstreamPosition.remove(); outstreamInit(); } else { return false; } adVolume = 1; return true; } /** * Pauses video content and sets up ad UI. */ function onContentPauseRequested() { videoContent.pause(); // This function is where you should setup UI for showing ads (for example, // display ad timer countdown, disable seeking and more.) // setupUIForAds(); } /** * Resumes video content and removes ad UI. */ function onContentResumeRequested() { videoContent.play(); // This function is where you should ensure that your UI is ready // to play content. It is the responsibility of the Publisher to // implement this function when necessary. // setupUIForContent(); } function onActiveView() { if (outstreamContainer) { const containerOffset = outstreamContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstreamPaused) { adsManager.resume(); outstreamPaused = false; } return true; } else { if (!outstreamPaused) { adsManager.pause(); outstreamPaused = true; } } } return false; } let outstreamInitInterval; if (typeof cpexPackage !== "undefined") { outstreamInitInterval = setInterval(tryToInitializeOutstream, 100); } else { const wrapper = getWrapper(); if (wrapper) { let outstreamInitialized = false; window.addEventListener('scroll', () => { if (!outstreamInitialized) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { outstreamInit(); outstreamInitialized = true; } } }); } } function tryToInitializeOutstream() { const wrapper = getWrapper(); if (wrapper) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstreamInitInterval); outstreamInit(); } } } else { clearInterval(outstreamInitInterval); } } }
OSZAR »