Rekonvalescence po covidu: co dělat, když stále trvá únava, bolesti hlavy, svalů či kloubů

10. 3. 2022

Sdílet

Autor: Depositphotos
Únava byla a je nejčastěji popisovanou potíží po covidu-19. Někdy trvá i týdny i měsíce po prodělaném onemocnění koronavirem. Lidé si často stěžují také na bolesti hlavy, bolest na hrudi, únavu či bolest svalů nebo dlouhotrvající kašel. Jak si poradit s rekonvalescencí po covidu?

Rekonvalescenci po prodělaném covidu jsme se již několikrát věnovali, nyní se k tématu znovu vracíme. Lidé ještě stále často onemocní covidem-19 a trpí následky v podobě dlouhodobé únavy, kašle či bolestí.

Co se dozvíte v článku
  1. Zpátky do formy? Rekonvalescence po covidu trvá týdny i měsíce
  2. Únava či bolesti – časté příznaky postcovidového syndromu
  3. Rady lékárníků, jak na postcovidový syndrom
  4. Únava po covidu v souvislosti s psychikou
  5. Rekonvalescence po covidu: co pro sebe můžete udělat sami?
  6. Homeopatie, která může pomoci při únavě po covidu

Zpátky do formy? Rekonvalescence po covidu trvá týdny i měsíce

Podle praktických lékařů se člověk vrací do formy přibližně po třech až čtyřech týdnech. Může se ale stát, že únava přetrvává i měsíce po vyléčení, rekonvalescenci nelze uspěchat.

„Myslel jsem, že už je po všem. Po těch nejpodivnějších sedmi týdnech nemoci, jaké jsem kdy zažil – s výkyvy vyčerpání, bolestí, zvoněním v uších, bolestmi hlavy či problémy s koncentrací – jsem se cítil výrazně lépe,“ popisuje své zkušenosti s nemocí covid-19 na blogu British Medical Journal Paul Garner, lékař a profesor Liverpoolské školy tropické medicíny v Anglii. Když se konečně cítil zase dobře, šel se projít a zacvičil si jógu. Jenže po dvanácti hodinách opět ulehl. Potíže, které měl po prodělané nemoci, se vrátily. Ani téměř po roce od prvních příznaků se ještě pořádně nepostavil na nohy. 

Únava či bolesti – časté příznaky postcovidového syndromu

Právě únava a vyčerpání patří k nejčastějším příznakům tzv. postcovidového syndromu. Tedy k přetrvávajícím potížím po prodělané nemoci, a to i v případě, kdy měl pacient pouze lehký průběh. Únavu často provázejí i další příznaky, jako například problémy se soustředěním nebo zhoršení paměti, návaly úzkosti, nespavost a celková slabost.

Postcovidový syndrom

Přetrvávání symptomů, jako je únava, bolesti svalů, dušnost, tachykardie, generalizované bolesti, zvýšená teplota, neurokognitivní potíže (zmatenost, zapomnětlivost) a psychiatrické symptomy (úzkosti, nespavost…), které nejsou vysvětlitelné jinou diagnózou, po dobu delší než 12 týdnů.

Lidé s dlouhodobými potížemi po covidu-19 vytvořili nedávno zcela novou kategorii pacientů. Podle studie publikované v odborném časopise Lancet, která sledovala pacienty s covidem po dobu šesti měsíců, pociťovalo vyšší únavu 63 % dotazovaných a 26 % uvádí přetrvávající poruchy spánku.

Další často uváděné potíže jsou například dlouhotrvající kašel, bolesti – na hrudi, svalů, hlavy ad. Česká lékárnická komora (ČLnK) připravila již v minulém roce pro laickou veřejnost praktické tipy, jak si pomoci s únavou a dalšími potížemi při rekonvalescenci po prodělání nemoci covid-19.

Rady lékárníků, jak na postcovidový syndrom

S výběrem vhodné terapie při tzv. postcovidovém syndromu poradí pacientům jejich lékárník, který individuálně zohlední vhodnost vybraných léčivých přípravků a může zabránit případným lékovým chybám. Vzhledem k tomu, že pouze registrované léčivé přípravky jsou pod přísnou kontrolou složení a obsahu léčivých a pomocných látek, doporučují lékárníci upřednostnit užívání všech níže uvedených substancí ve formě léčivého přípravku, nikoliv doplňků stravy. Přípravek je nutné užívat v doporučené denní dávce, kterou by měl pacient rovněž konzultovat se svým lékárníkem. 

Dlouhodobý kašel

Častým příznakem postcovidového syndromu je kašel. Ten ve fázi rekonvalescence po infekci covid-19 neplní ochrannou funkci, ale naopak organismus zatěžuje a pacienta obtěžuje. Z léků lze při postcovidovém kašli doporučit přípravky s obsahem tymiánu a břečťanu. Dále je vhodné zajistit také dostatečnou vlhkost sliznic. Je důležité dodržovat pitný režim, nemocnému je možné podávat také přípravky s obsahem lišejníku. U přetrvávajícího dráždivého kašle je možné jej tlumit vhodnými antitusiky, s jejichž výběrem poradí lékárník.

Kromě správné vlhkosti vzduchu je důležité zajistit, aby domácí prostředí pacienta bylo bez dráždivých podnětů, zejména cigaretového kouře. Vhodná je také inhalace přírodní minerální vodou, případně dechová rehabilitace, kterou pacienta naučí fyzioterapeut.

Bolesti hlavy, svalů a kloubů

Chronické bolesti svalů a kloubů mohou být způsobené jednak přímým poškozením tkání (virus může proniknout i do svalové buňky), nebo zvýšením citlivosti tkáně. U těžkého průběhu infekce covid-19 může dojít dokonce k poškození nervů a vzniku neuropatických bolestí. Rekonvalescence trvá týdny, není tedy vhodné a obvykle ani možné okamžitě naskočit do plného pracovního nebo tréninkového režimu.

I v případě tohoto postcovidového syndromu je vhodné zjistit, co konkrétnímu nemocnému přináší úlevu. Zda to je teplo, nebo chlad, pohyb, nebo klid. Doporučit lze mírné pohybové aktivity, jako například dechová cvičení, strečink, jógu, chůzi apod. Tato režimová opatření jsou základem terapie a rekonvalescence.

Jako pomocná léčiva lze použít hořčík v dávkách 300 mg denně. S výběrem dobře vstřebatelného hořčíku pacientovi pomůže lékárník. Případně lze pro zklidnění předrážděného nervového systému užívat extrakt z levandule.

Únava

Léčba chronické únavy musí být vždy individualizovaná, zaměřená na potíže konkrétního pacienta, které je vhodné řešit postupně, krok za krokem. Není dobré pokoušet se únavu překonávat násilně prováděnou aktivitou, avšak na druhou stranu, pro zvládnutí chronické únavy není vhodný ani dlouhodobý pasivní odpočinek. Organismus musí mít stálou stimulační zátěž: fyzickou (procházka, protáhnutí, lehké cvičení) i psychickou (např. četba zábavné literatury). Dále je důležitý dostatek spánku a emočně pozitivní program.

Léčivem, které je přímo indikováno k podpůrné léčbě únavy, je extrakt z rozchodnice růžové (Rhodiola rosea). Mnoho studií ukázalo, že tato léčivá rostlina zvyšuje schopnost podávat fyzický výkon a dramaticky zkracuje dobu regenerace.

Neschopnost soustředění se a zapomnětlivost

Pro zlepšení krevního průtoku a tím i zlepšení distribuce kyslíku ve tkáních, k lepšímu využití energetických zdrojů těla a ke zlepšení odsunu škodlivin z tkání lze použít přípravky z listů jinanu dvoulaločného (Ginkgo biloba), vzhledem k potenciálním interakcím je však vhodné se před jejich užíváním poradit s lékárníkem, který individuálně zohlední vhodnost užití u daného pacienta. Vždy je vhodné volit registrovaný lék, který je dostupný i bez lékařského předpisu. Ten je přímo indikován k léčbě symptomů, jako jsou poruchy paměti, poruchy koncentrace, depresivní nálada a další.

Zdroj: ČLnK, souhrn doporučení byl vypracován ve spolupráci s PharmDr. MVDr. Vilmou Vranovou, Ph.D., a PharmDr. Karlem Vašutem, Ph.D., z Ústavu aplikované farmacie, Farmaceutické fakulty MUNI Brno.

Galerie: Respirační fyzioterapie pomáhá pacientům po prodělání covidu-19

Únava po covidu v souvislosti s psychikou

Někteří vědci přisuzují přetrvávající vyčerpanost po infekci psychice. „Pacienti někdy po infekci hlásí depresivní náladu,“ říká Mascha Binderová z Uniklinik Halle v Německu. Mohlo by jít tedy i o problém s vyrovnáním se s nemocí. „Domnívám se, že komplex únavy a dalších příznaků je v těchto případech spíše příčinou psychologických problémů, nikoli jejich důsledkem,“ vysvětluje Mascha Binderová.

To podporuje skutečnost, že k tomu dochází pouze u určitých virů, nikoli obecně u všech virových infekcí.

Vídeňský neurolog Michael Stingl nabádá k opatrnosti: „Teoreticky může závažná infekce vést k traumatu, které se pak mimo jiné projeví vyčerpáním. Ale s takovou diagnózou musíme být velmi opatrní a nejprve bychom měli zcela vyloučit fyzické příčiny.“

Rekonvalescence po covidu: co pro sebe můžete udělat sami?

Alfou a omegou je dodržování zásad zdravého životního stylu. Je třeba konzumovat vyváženou stravu bohatou na vitaminy a minerály a dopřát si přiměřený pohyb. Rozhodně ale není vhodné přetěžovat se! Nezbytný je také odpočinek a kvalitní spánek.

Doporučovanými vitaminy při únavě jsou pak vitaminy skupiny B a vitamin C, pomáhá i rovnováha střevní mikroflóry, která může být po prodělané nemoci narušená. V tomto případě jsou vhodná probiotika. Lékařka Kristina Potúčková radí: „Hodně odpočívejte a nesnažte se nic urychlit. Váš organismus vám tím dává signály, nesnažte se jít přes jeho hranice.“

Homeopatie, která může pomoci při únavě po covidu

Léků proti únavě příliš není, proto někteří lékaři odkazují na přírodní medicínu či homeopatika.

Kombinace dvou léků China rubra 9 CH – 4× denně 5 granulí a Phosphoricum acidum 15 CH – 2× denně 5 granulí.

Při potížích s dýcháním doporučuje Kristina Potúčková Phosphorus 9 CH a Carbo vegetabilis 9 CH. „Rozpusťte deset granulí od každého léku ve vodě. Roztok popíjejte během celého dne. Každý den si připravte čerstvý roztok.“ 

Lékařka Ilona Ludvíková při celkovém fyzickém a psychickém vyčerpání v důsledku péče o ostatní doporučuje lék Arnica montana v ředění 9 až 200 CH.

Autor článku

Své profesní působení v médiích zahájila v týdeníku Reflex. Pracovala v kreativním týmu TV NOVA a vedla sekci Sport a relax serveru Vitalia.cz vydavatelství Internet Info. Podílela se také na jeho dalším projektu, serveru 120na80.cz.

Redaktorka, editorka, dlouholetá šéfredaktorka serveru Vitalia.cz (do června 2022)

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