Následky po covidu má desetina pacientů. Mají nárok na další péči

3. 2. 2021

Sdílet

Únava, dušnost, přetrvávající potíže s chutí nebo čichem, problémy se soustředěním. Pozůstatky koronavirové infekce trápí čím dál více lidí, podle odhadu lékařů nejméně 10 %. Péče o ně začala vznikat nejprve spíše živelně. Od února se o všechny, u nichž přetrvávají potíže, budou oficiálně starat především plicní lékaři.

Schválení vyhlášky, která novinku legislativně upravuje, a spuštění speciálního registru, kam budou pneumologové péči o své pacienty zaznamenávat, je podle předsedkyně českých plicních lékařů prof. Martiny Vašákové na spadnutí. Péče o všechny nemocné by tak měla být dostupná pro každého, a to na 400 místech po republice – přesně tolik funguje ordinací plicních lékařů. Už teď ale pacienti mají různé možnosti.

Co se dozvíte v článku
  1. Jak se cítí mnozí pacienti po COVID-19
  2. Únava je hlavní pozůstatek koronaviru
  3. Postcovidových pacientů je čím dál více
  4. Unikátní centrum pro pacienty po covidu
  5. Další možnosti: polikliniky, nemocnice, lázně…

Jak se cítí mnozí pacienti po COVID-19

Pandemie koronaviru stvořila zbrusu novou kategorii nemocných – tzv. postcovidových. Jsou to lidé, kteří po prodělání nemoci stále bojují s jejími následky, jsou dušní, unavení, nemají čich a chuť, nemohou spát a stále je bolí hlava, nesoustředí se. Právě tito lidé, jimž zdravotní trápení s covidem neskončilo, se nově dostanou do péče plicních lékařů. Stejně jako ti, kteří leželi kvůli těžšímu průběhu koronaviru v nemocnici. 

„Celá řada lidí, kteří prodělali COVID-19, se i po jeho skončení potýká s obtížemi, většinou plicního rázu. O tyto lidi se staráme už delší dobu, ale nyní dostane péče oficiální rámec, jsou pro ni stvořeny postupy a bude spuštěn registr, kde můžeme shromažďovat data o dopadech nemoci. Pacienty do ambulancí plicních lékařů posílají nejenom nemocnice, ale také praktičtí lékaři,“ vysvětluje Martina Vašáková, předsedkyně České pneumologické a ftizeologické společnosti.

Co je to post covid syndrom

Jde o soubor příznaků a chorobných změn, které postihují nejen plíce, ale i řadu jiných orgánů a tkání. Jedná se o změny způsobené:

  • hypoxemií (nízkým obsahem kyslíku v krvi), zejména hypoxií (nedostatkem kyslíku) v orgánech a tkáních při COVID pneumonii a syndromu akutní dechové tísně,
  • zánětlivou a koagulační (srážecí) fází akutního covidu a post-akutního covidu,
  • přímým účinkem viru,
  • intenzivní péčí. 

Únava je hlavní pozůstatek koronaviru

Drtivá většina lidí, která plicního lékaře vyhledá ať už sama, nebo na doporučení, si stěžuje na únavu. Na vině může být nedostatečná okysličenost a to zjistí až pneumolog při podrobnější prohlídce. 

„Pacienty, kteří prodělali COVID-19, pošle pneumolog vždy na rentgen plic, provede tzv. spirometrii – tedy funkční vyšetření plic včetně difuze, změří nasycení krve kyslíkem jak v klidu, tak po zátěži,“ popisuje Ivana Čierna Peterová, předsedkyně Sekce ambulantních pneumologů. 

Podle přednosty plicní kliniky Fakultní nemocnice Hradec Králové Vladimíra Koblížka má přetrvávající potíže po prodělání nemoci více než deset procent nemocných a výjimkou nejsou ani mladší ročníky. 

Galerie: Odběry krve zjistí hladinu protilátek proti COVID-19

Postcovidových pacientů je čím dál více

Ivana Čierná Peterová má plicní ambulanci v Brandýse nad Labem a z nově příchozích pacientů je přibližně třetina „postcovidových“. Podobně je tomu i v pražském plicním zařízení Medicon. 

„Je nás zde osm lékařek a každý týden vyšetříme asi čtyřicet nově příchozích postcovidových pacientů. Naštěstí jsme zatím téměř u nikoho neshledali závažné poškození plic, a to ani u těch, kteří byli na ventilátoru. Jen u nízkého procenta se objevují jisté patologie – mají například sníženou plicní difuzi či ventilační poruchu a v takových případech řešíme, zda léčit, nebo sledovat, jestli se porucha sama časem nezlepší,“  říká plicní lékařka Václava Bártů z Mediconu. 

Plicní lékaři postcovidové pacienty sledují a rozdělují do čtyř základních skupin podle projevů a průběhu nemoci. Vytvářejí pro ně léčebné postupy, případně je předávají do péče dalších specialistů.

Kdy po covidu vyhledat specialistu

  • Plicní lékaři pevně stanovili pravidla, kterými se v péči o nemocné řídit.
  • Pacienta, který prodělal těžkou formu koronavirového postižení s léčbou v nemocnici, by měl pneumolog vidět 6–12 týdnů od stanovení diagnózy a pak po dalších 6 měsících pod dobu 3 let podle klinického stavu. 
  • Lidé, kteří prodělali COVID-19 ambulantně a zvládli jej doma, by měli k plicnímu lékaři zajít, pokud se po 2–3 měsících od infekce stále potýkají s respiračními obtížemi. 
  • Pacienty by měli sledovat i praktici, a pokud mají podezření, že se nezotavují dostatečně, poslat je k plicním lékařům.

Unikátní centrum pro pacienty po covidu

První oficiální centrum, které se stará o pacienty po covidu, vzniklo v Hradci Králové.

„Vytvořili jsme unikátní centrum, které nabídne pacientům pomoc s následky po onemocnění COVID-19 napříč různými obory od plicních lékařů, kardiologů, neurologů, psychiatrů přes nefrology, dermatology, gastroenterology, revmatology a další až po rehabilitační lékaře. Od začátku epidemie bylo v naší nemocnici hospitalizováno již několik stovek pacientů v poměrně vážném stavu, a je proto nutné jim nabídnout kvalitní následnou péči,“ uvádí ředitel FN HK Vladimír Palička.

Podle pneumologa Michala Kopeckého, který toto centrum vede, je COVID-19 zrádná nemoc, která se mnohdy podceňuje. Většina nových příchozích jsou pacienti, kteří před nemocí neměli žádné potíže, nejčastěji je jim mezi 40 a 60 lety.

„Vidíme u nich poruchy plicní difuze a poruchu okysličení krve zejména při zátěži. Zajímavé je, že se vyskytují i lidé, u nichž se na CT plic objeví fibrotické změny, a oni nepociťují, že by se jim hůře dýchalo,“ komentuje první zkušenosti lékař.

Jak funguje postcovidové centrum v Hradci Králové

  • Sídlí v budově Plicní kliniky FN HK, je otevřené každý všední den.
  • Zájemci s obtížemi po prodělaném onemocnění COVID-19 mohou svůj stav konzultovat telefonicky na lince 495 836 020, pacient je dle domluvy objednán do centra, nebo mu bude navržen jiný postup. 
  • Před vyšetřením v centru bude nutné podstoupit základní vyšetření cestou praktického lékaře nebo specialisty, který posoudí možnou souvislost s onemocněním COVID-19. Tito lékaři mohou pacienty objednat do Centra.
  • U všech pacientů bude proveden odběr krve, moči, vyšetřeny plicní funkce, EKG vyšetření a zhodnocen celkový zdravotní stav. 
  • Více informací je k dispozici zde.

Další možnosti: polikliniky, nemocnice, lázně…

Že je třeba zajistit péči o pacienty po prodělání COVID-19 i po delší době, se ukazuje i na tom, že různé formy pomoci „po covidu“ se objevují už od konce minulého roku. Třeba na některých poliklinikách či v nemocnicích se již o takové pacienty starají. Například na Poliklinice v Praze 7 byla zavedená péče o pacienty s „dlouhým covidem“ a na webových stránkách jsou k dispozici telefonní čísla na různé specializace podle konkrétních potíží, které pacient má – neurologie, plicní, ORL, kožní, rehabilitace, psychologie…

Fakultní nemocnice Brno a Masarykova univerzita zase organizují systematické sledování pacientů po prodělaném onemocnění novým koronavirem. Cílem studie je zhodnotit průběh COVID-19, terapii, a zejména odhalit případné časné či pozdní následky choroby, které se mohou týkat nejen plic, ale i srdce, jater nebo nervové soustavy.

V prosinci se také k péči o pacienty po COVID-19 „přihlásilo“ například Sanatorium Jablunkov, které má dlouhou tradici v léčbě různých plicních onemocnění počínaje tuberkulózou, přes astma, bronchitidy či CHOPN. U postcovidových pacientů se zaměřuje především na plicní fyzioterapii, která napomáhá k regeneraci dechových funkcí a zároveň vede ke zvýšení fyzické i psychické kondice. Speciální ambulance otvírají i nemocnice (např. Nymburk), pacientům po pneumonii, způsobené covidem, pomáhají také v lázních.

Autor článku

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

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