Léčba leukémie se zlepšuje. Nejdůležitější je včasná diagnostika

3. 12. 2018 15:18
12 nových názorů
Ilustrační obrázek
Autor: VitalikRadko – Depositphotos
Ilustrační obrázek
Leukémie nebo také rakovina krve je neinfekční vážné onemocnění. V závislosti na projevech nemoci se leukémie člení do několik typů, ty mají různou léčbu. Nejčastěji se ale léčí chemoterapií. Procento úspěšnosti léčby se odvíjí od celkového zdravotního stavu nemocného i podle stádia nemoci.


Většina lidí zná leukémii především jakožto onemocnění malých dětí, ta ale postihuje starší lidi mnohem více. I léčba bývá u dětí úspěšnější, mívají totiž jinou formu nemoci. Jaké typy nemoci existují a čím se liší se můžete dočíst níže.

Za posledních 20 let vzrostla prevalence (počet lidí, kteří nemoc měli nebo mají) leukémie trojnásobně. To ale neznamená, že je nemoc více rozšířená. Naopak. Číslo roste, protože se zlepšuje medicína, díky čemuž dochází k častější diagnostice a následné úspěšné léčbě.

Hlavní typy leukémie

Akutní lymfoblastická leukémie (ALL)

Tato forma se nejčastěji projevuje u dětí, především mezi 2 a 5 rokem života. Při tomto typu nemocné bílé krvinky utlačují ty zdravé, čímž je narušena krvetvorba. Zvláště u dětských pacientů je úspěšnost léčby této nemoci vyšší než 80 procent.

Akutní myeloidní leukémie (AML)

Se objevuje spíše u starších lidí, může ale postihnout i mladé. V těle při akutní myeloidní leukémii přestanou vyzrávat blasty a tělo se zaplaví postiženými bílými krvinkami. Tento druh se člení ještě na mnoho podtypů, podle kterých se dále určuje léčba i šance na přežití.

Chronická lymfocytární leukémie (CLL)

Je nejrozšířenějším typem a zpravidla postihuje lidi starší 50 let. Zajímavostí je, že nemoc postihuje výhradně bělochy a mnohem více muže než ženy. Bohužel je tento typ doposud neléčitelný.

Chronická myeloidní leukémie (CML)

Chronická myeloidní leukémie činí asi čtvrtinu případů u pacientů mezi 45 a 55 lety. Nemoc má tři stádia, na nichž má závislost forma léčby i pravděpodobnost úspěšné léčby. V prvním stádiu není třeba drastické léčby, v druhém je nemoc často léčitelná, forma léčby je již ale dost invazivní. Ve posledním stádiu již bohužel jsou možnosti léčby značně omezené.

Příznaky leukémie

Na leukémii se často přichází úplně náhodou při testování krve kvůli nějaké jiné příčině. Nejčastějším příznakem bývá krvácení z nosu a tvorba malých teček na kůži. Nemocný může cítit bolest na levé straně břicha, mít zvětšené lymfatické uzliny a sníženou chuť k jídlu.

Další příznaky:

  • Horečka
  • Noční pocení
  • Časté infekce
  • Slabost
  • Únava
  • Bolesti hlavy
  • Bolesti kloubů
  • Modřiny bez příčiny
  • Krvácení z dásní a z konečníku
  • Úbytek na váze

Příznaky leukémie u dětí

Děti nejčastěji trpí ALL formou, která se projevuje jako další nemoci krvetvorby, tedy chudokrevností, krvácením z nosu a dásní či snížená imunita.

Léčba leukémie

Léčba leukémie je odvíjí od jejího typu a od stádia, ve kterém se pacient s rakovinou nachází. Především se lečí těmito léčbami.

Chemoterapie

Chemoterapie je jednou ze základních možností léčby. Funguje na principu podávání chemických látek cytostatik, které zastavují buněčný růst. Forma podání může být tabletami nebo nitrožilně. Látky se dostanou do krevního oběhu a zničí nádorové látky. Bohužel ale nelze specifikovat, jaké buňky mají cytostatika poškodit, porto dochází k dočasnému poškození i zdravých buněk. Účelem chemoterapie je co nejúspěšnější zničení nádorů za cenu co nejmenšího poškození zdravých buněk. Přesto právě z toho plynou vedlejší účinky chemoterapie.

Vedlejší účinky závisí na typu, který je nemocnému podán, ve většině případů spíše na kombinaci cytostatik, která byla podána. Mezi nejznámější patří vypadání vlasů či nechutenství. Dále dochází ke zvracení a dalším trávícím potížím, poškození sliznic, větší citlivosti na infekce, a samozřejmě poškození krvetvorby. Pacient se musí během léčby velice hlídat a kvůli jakékoli komplikace či mírnému krvácení navštívit lékaře.

Terapie steroidy

Ačkoli se steroidy běžně vyskytují v lidském těle, ve výrazně zvýšeném množství dokážou léčit leukémii, především v případě akutní lymfoblastické leukémie. Při léčbě dokonce mají nezastupitelnou úlohu. Využívají se steroidy prednison a dexamethazon.

Steroidy ale bohužel mají velké množství vedlejších účinků: zvýšená chuť k jídlu, která vede k přibírání především v obličeji, pase a v ramenou, potíže s usínáním, zvýšený krevní tlak a vysoká hladina cukru. Při léčbě bývají vedlejší příznaky hodně nepříjemné, je ale třeba, aby pacient pamatoval na to, že po konci léčby odezní.

V případě zvýšených hladin cukru v krvi je nutné dodržovat diabetickou dietu.

Radioterapie

Tato terapie využívá ionizující záření, které ničí buňky. Bohužel opět ničí nejen nádorové buňky, ale i zdravé tkáně, proto se léčba využívá především při ničení nahromaděných leukemických buněk na různých částech těla. Je obzvláště účinná při léčbě hlavy, kde dokonce nedochází k výrazným vedlejším účinkům.

Při léčbě radioterapií v oblasti břicha často dochází ke snížení schopnosti reprodukce až k úplné neplodnosti. V případě léčby je dobré s lékařem konzultovat své možnosti ještě před léčbou.

Transplantace kostní dřeni

V dnešní době hraje významnou roli v léčbě leukémie. Užívá se ve vážných případech, kdy musí docházek k vysoké dávce chemoterapie i radioterapie, což by úplně zničilo krvetvorbu pacienta. Díky transplantaci ale může být krvetvorba obnovena.

Dárcem by měl být člověk s co nejpodobnější buněčnou stavbou, tedy sourozenec či jiný příbuzný. Vhodní dárci se ale dají najít i mezi cizími lidmi. Ideálními dárci bývají jednovaječná dvojčata.

Postup po úspěšné léčbě

Léčba pokračuje i ve chvíli, kdy již nedochází k detekci rakovinných buněk. V dnešní medicíně neexistují totiž natolik citlivé testy, a je prokázáno, že když byla léčba ukončena brzy po ustoupení rakovinných látek, brzy se opět rozmnožily.

Avšak po dostatečné léčbě dochází k pravidelnému testování krve. To musí vyléčený pacient absolvovat pravidelně až do konce života s tím, že se postupně snižuje frekvence testování.

Úmrtnost při leukémii

Pokud je akutní leukémie včas diagnostikována, má pacient vysokou šanci na přežití. Dokonce jsou formy leukémie, které se vůbec léčit nemusí. Jakou pravděpodobnost na úspěšnou léčbu pacient má určí lékař, který musí vzít v potaz věk a celkové zdraví pacienta a samozřejmě nakolik je nemoc pokročilá a jakého typu je.

V roce 2018 bylo leukémií diagnostikováno 1 332 a na následky nemoci zemřelo 919 lidí, ti ale nemuseli být nikdy diagnostikovaní.

Jaroslav (neregistrovaný)

Dobrý den, trošku se bojím dědičnosti můj děda, kterého jsem nepoznal na to zemřel v 30ti maximálně.jsem první chlap po něm v linii v rodině. Potykam se poslední rok s častými infekcemi, vysoké crp, léčba antibiotiky, krevní obraz špatně hodnoty bílých krvinek a pod. Ale to dávají doktoři za vinu ATB a infekci, kterou jedny antibiotika nepřeleci, dále se mi tvoří po tele občas malé červené výrazně skvrnky ale nikoliv pupínky vždy jedna osamělá, momentálně mám asi dvě na prsou a jednu na ruce, ale jsou to jiné než ukazuje Google, výrazně červená malé tečky v barvě krve čerstvé bych popsal. V noci se dost potím hlavně v oblasti hlavy nebo možná jen v oblasti hlavy,krvácím často z nosu ale to může souviset s tím že mám často ucpaný nos, jediné co nezaznamenávam je úbytek váhy. Únava může souviset se zaměstnáním kdy vstávám velmi brzy. Zeslábl jsem ale to spíše vidím na linejsi způsob života a snížení navštěvování tělocvičen na párkrát do měsíce z dřívějších x krát do týdne, asi je na místě si nechat udělat vysetreni krevniho obrazu, na to musím požádat praktickou lékařku aby mi dala zadanku? Nebo jaký na to máte názor díky

Dobrý den,
“malé červené skvrny” i krvácení z nosu může souviset se zvýšenou lomivostí kapilár, na to by vám mohl pomoci Ascorutin, který je volně prodejný v lékárnách.
Pokud se Vám ale na vašem zdravot. stavu cokoliv nezdá, doporučuji vám navštívit praktického lékaře, který vás komplexně vyšetří.

mistr_jojo (neregistrovaný)

Dobrý den. Jsem teď poslední dobou unavený a spím tak 10 hodin denně. Navíc nemám občas chuť k jídlu i když jsem třeba dlouho nic nejedl. Občas ale chuť mám normální. Už měsíc mě trápí moje ucho. Občas zalehne, občas slyším svůj vlastní tep srdce, občas mi v něm velmi potichu píská a občas mě bolí. Někdy se to dny neukáže a někdy mě to trápí dny v kuse. Podle ucha bych tipoval že to asi rakovina nebude. Navíc ta únava a nechuť k jídlu mě trápí jenom týden a je to po letu z Prahy do Manchesteru. Není to dlouhý let ale nevím jestli to nemůže souviset.

Dobrý den,
jak se říká “všechno může souviset se vším”. Bez komplexního vyšetření takto těžko říci.
Vzhledem k vašim obtížím bych vás ale urychleně nasměrovala k lékaři (nejlépe rovnou na ORL), kde vás podrobně vyšetří a určitě vám pomůžou.

Zuzana (neregistrovaný)
Dobrý den dělají se mi veliké až černé modřiny na nohou bolí mě hlava jsem unavená hubnu a nemám chuť k jídlu dekuji
  • 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 »