Rakovina ničí vztahy. Ženám až sedmkrát častěji, muži od nich odcházejí

3. 6. 2025

Sdílet

Život onkologických pacientů se netočí jen kolem léků a operací. Tématem, které hodně řeší, jsou i vztahy, intimita a sexualita. „Když toto téma v ordinaci otevřeme, vidím, jak jsou pacientky smutné,“ říká onkoložka Jana Halámková.

„Rakovina zásadně mění kvalitu života nemocných i jejich partnerů. Diagnóza a následná léčba přinášejí nejen fyzické změny, ale i psychické a emocionální výzvy, které mohou negativně ovlivnit partnerské vztahy a intimní spojení,“ říká předsedkyně Výboru Hlasu onkologických pacientů Petra Adámková.

Co se dozvíte v článku
  1. Nemoc obnažila chybějící empatii
  2. Jak pečovat o vztah? Stačí vlastně málo
  3. Kdy je čas řešit sexualitu?
  4. Fertilita je tématem
  5. Léčba dopadá na tělo a psychiku
  6. Odborná podpora pacientů chybí

Mezi pacienty a pacientkami toto téma významně rezonuje, jak ukazují průzkumy i vlastní zkušenosti jak lékařů, tak samotných nemocných. Vztahy se jim rozpadají. Častěji pak v případě, kdy onemocní žena. Oproti vztahům, kde je pacientem muž, až sedmkrát častěji. „Žena chrání přístav, zatímco muž opouští potápějící se loď,“ podotkla lékařka Jana Halámková na akci Survivorship day – Den onkopacientů. 

Nemoc obnažila chybějící empatii

Své o tom ví Veronika Blahuta, které lékaři diagnostikovali rakovinu prsu. Brzy na to se jí začal hroutit vztah, o kterém si vždy myslela, že obstojí i v těch nejtěžších časech. Manžel se nedokázal dívat, jak jí ubývá sil a jak se mění její tělo. Z krásné a energické ženy se nevyhnutelně stala pacientka.

Byl to pomalý, ale neodvratný konec jejího manželství. Místo podpory a blízkosti přišly výčitky, odstup, mlčení. Nemoc ale obnažila všechno, co už asi dávno chybělo – empatie, přijetí a skutečné partnerství.

A tak Veronika zůstala sama s malým synem, s tělem zasaženým chemoterapií a s otázkami o budoucnosti. Naštěstí ji to nezlomilo. Našla oporu v projektu Bellis – mladé ženy s rakovinou prsu. Pomohla jí také psycholožka, díky níž začala znovu přijímat sama sebe a našla sílu.

Diagnóza rakovina, ale co dál? Onkologičtí pacienti často nevědí, za kým jít Přečtěte si také:

Diagnóza rakovina, ale co dál? Onkologičtí pacienti často nevědí, za kým jít

„V jednom odborném článku se psalo, že zatímco žena chrání přístav, muž opouští potápějící se loď. To asi o něčem svědčí,“ zmiňuje onkoložka Jana Halámková.

Jak pečovat o vztah? Stačí vlastně málo

O vztahy je potřeba pečovat, stejně jako se staráme například o květiny. Ty bez naší péče také uvadají a chřadnou. „Když si člověk koupí květinu, má z ní radost, dá ji na okno, ona krásně voní. Raduje se z ní i druhý den, třetí… A čtvrtý? Kytka ja unavenější, už není tak čerstvá a tolik nevoní. S naším vztahem je to stejné. Musíme o něj denně pečovat. Když se nestaráme, necháme ho být, tak je pak unavený. Přitom vlastně stačí ráno říct: Měj se hezky, těším se na tebe. A večer si dát pusu,“ radí psychoterapeutka Zuzana Peterová.

U onkologických pacientů ovšem do hry vstupují další věci, jako jsou léčba, zákroky na těle, mastektomie u žen s rakovinou prsu, hormonální léčba, která vede ke změnám chování pacientek i sexuálního chování. „To podle výzkumu nepostihuje jen pacientky s gynekologickými nádory, jak by se dalo čekat, ale více než 70 procent pacientů s kolorektálním karcinomem a například 50 procent pacientek, které prodělaly transplantaci kostní dřeně. Tam je třeba poměrně překvapující,“ uvedla doktorka Halámková.

Kdy je čas řešit sexualitu?

Mohlo by se zdát, že se sexualitou nejvíce souvisí gynekologické diagnózy, nicméně jak bylo řečeno, téma je to pro všechny pacienty a lékaře. Ti by ho měli naťuknout hned na začátku, jakkoliv se může zdát, že nejde o tak důležitou věc. 

V prvních dnech po určení diagnózy může jít navíc všechno poměrně ráz na ráz. „V České republice je dostupnost léčby neuvěřitelná, na operaci se čeká pár dní, například v Anglii jsou to i tři, čtyři měsíce. Chápeme, že je to pro pacientku rychlé,“ uvádí onkogynekolog Michael Halaška.

Jinak se samozřejmě k tématu přistupuje u mladých žen a jinak u pacientek seniorského věku. „Ani v tomto případě bych to ale nepodceňoval, protože podle statistik z domovů důchodců víme, že i tam probíhá sexuální aktivita ve 30 až 40 procentech. Ale samozřejmě jiná důležitost to bude u pacientky, které je osmdesát, a jiná pro čtyřicetiletou,“ říká Halaška.

Šli byste na vyšetření, které by ukázalo pravděpodobnost onemocnění srdce nebo rakoviny?

Fertilita je tématem

Jedním z témat, kterým se lékaři musí věnovat, je fertilita – zachování plodnosti. Tedy zda a jak je možné, především u pacientek, ale samozřejmě i u pacientů, zachovat možnost mít v budoucnu děti. Ale i naopak. U žen do 50 let by se měli zmínit i o nechtěném otěhotnění. I to se totiž může stát. Pokud žena podstupuje chemoterapii, je samozřejmě šance otěhotnět nižší, ale stále existuje. A pak je to podle lékaře překvapení pro všechny.

„Další skupinou jsou pacientky s radioterapií. Dělá se u karcinomů děložního hrdla. Žena ji podstupuje šest, sedm týdnů a dochází k tomu, že pochva se může slepit. Pokud nedochází k dilataci, může to být i nevratné. Pak pacientka přijde k nám a může opravdu být pozdě,“ popisuje onkogynekolog.

Zná je jen polovina lidí, chodí na ně třetina. Screening přitom může zachránit život Přečtěte si také:

Zná je jen polovina lidí, chodí na ně třetina. Screening přitom může zachránit život

Léčba dopadá na tělo a psychiku

Léčba rakoviny, včetně chemoterapie, radioterapie a chirurgických zákroků, může u pacientů způsobit řadu fyzických změn, které ovlivňují sexuální funkce. U žen může dojít k vaginální suchosti, bolestivému styku či hormonálním změnám. U mužů naopak k impotenci (erektilní dysfunkci) nebo snížené sexuální touze. Tyto změny často vedou k velké frustraci a pocitu ztráty vlastní identity.

Téměř se vším se ovšem dá něco dělat. Například sexshop Růžový slon školí své zaměstnance i tak, aby uměli poradit i v těchto případech. „Můžeme doporučit spoustu věcí. Víme, že každý člověk přichází se svým problémem a snažíme se pomoci. Existují lubrikanty speciálně vyvinuté, aby nedráždily, aby hydratovaly. Máme dilatátory, které mohou pomoci právě při srůstech nebo při bolestivém sexu. Jsou pomůcky, které se používají v páru, kdy třeba není možné dosáhnout erekce,“ vyjmenovává Lucie Slováčková z obchodu Růžový slon.

Obezita jako hlavní příčina rakoviny dělohy. Typickou pacientku poznáme už ve dveřích, říká lékař Přečtěte si také:

Obezita jako hlavní příčina rakoviny dělohy. Typickou pacientku poznáme už ve dveřích, říká lékař

Onkologické onemocnění také často negativně ovlivňuje i samotné vnímání vlastního těla. Jizvy po operacích, ztráta vlasů nebo změny hmotnosti mohou vést k nízkému sebevědomí a pocitu neatraktivity až beznaděje. Tyto nepříjemné zdravotní potíže mohou způsobit, že se pacient zcela stáhne z intimních vztahů a vyhýbá se jakékoliv sexuální aktivitě. Pak může být na místě psychoterapie nebo sdílení zkušeností s ostatními pacienty.

Odborná podpora pacientů chybí

Jak upozorňuje Hlas onkologických pacientů, nemocní často postrádají také dostatečné informace a podporu, která se týká sexuálních problémů spojených s onkologickým onemocněním. 

„Zdravotnický personál se mnohdy zaměřuje především na léčbu samotné nemoci, přičemž otázky intimity a narušení rolí v partnerském vztahu zůstávají opomíjené. Tento nedostatek informací může vést pak k prohloubení pocitu izolace a beznaděje. Zapojení psychologů a sexuologů do péče o onkologické pacienty proto může výrazně pomoci při řešení intimních problémů,“ uzavírá místopředsedkyně HOP Michaela Tůmová.

Autor článku

Redaktorka serveru Vitalia.cz. Zaměřuje se především na zdravý životní styl, pohyb a zdraví dětí. Mimo novinařinu pracuje také jako lektorka pohybových kurzů pro děti a rodiče.

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