Kratší hospitalizace i kontrolované pití. Léčba závislosti na alkoholu se mění

17. 2. 2025

Sdílet

Žena se skleničkou v ruce potřebuje pomoc se závislostí na alkoholu
Autor: Depositphotos
Může být léčba alkoholismu úspěšná, i když pacient přinejmenším zpočátku nepřestane pít? V dnešní době ano. Adiktologické služby se v tomto smyslu pozvolna mění a pacient se stává partnerem lékaře, přičemž péče je mu šita na míru.

Pokrok představují v mnoha oborech medicíny nová léčiva nebo vylepšené přístroje. V léčbě pacientů závislých na alkoholu však nic takového nečekejte. Jak sami lékaři říkají, co do přístrojového vybavení je adiktologie v medicíně tou nejlevnější. Stejně tak léků má poskrovnu. To ale neznamená, že léčba závislých se neposouvá.

Co se dozvíte v článku
  1. Pacient jako partner
  2. Kratší pobyt na lůžku
  3. Pro někoho je cestou léčba pitím
  4. Lékaři se učí na pacienta počkat
  5. Pomůže virtuální realita
  6. Přibývá soukromých klinik 
  7. Trendem v prevenci je motivovat

A změny se nevyhýbají ani pražské Klinice adiktologie 1. lékařské fakulty Univerzity Karlovy (LF UK) a Všeobecné fakultní nemocnice (VFN), známé také jako U Apolináře. Tam alkoholiky léčí už od roku 1948. Pro Vitalii některé příklady inovací popsal přednosta Michal Miovský.

Pacient jako partner

Trendem, který propojuje péči napříč adiktologií a neplatí jen pro léčbu alkoholismu, je individualizace péče a posílení role pacienta. Chceme upozadit pasivitu, ke které sváděl původní systém, a posílit partnerský prvek. Pacient k nám přichází jako ten, kdo se přímo aktivně podílí na nastavení vlastní léčby a je za ni také spoluzodpovědný, říká Michal Miovský. S tím souvisí také posilování pacientovy autonomie a motivace k léčbě. 

Protože každý pacient přichází s jinou mírou a v jiném stadiu problému, odborníci už se nesnaží všechny napasovat do jednoho modelu péče. Takže na míru se dá nastavovat třeba délka terapie, která by vždy měla mít možnost prodloužení.

Kratší pobyt na lůžku

Přitom trendem je zkracování hospitalizačních pobytů, a tedy i doby, kdy je pacient např. vytržen ze zaměstnání. Zatímco dříve mohla hospitalizace se závislostí trvat i 14 týdnů, dnes se lékaři spíše kloní ke čtyřem nebo osmi týdnům, na které je navázaná individuálně nastavená podpůrná léčba v podobě péče v ambulanci nebo třeba skupinové terapie.

A mění se i léčebný program, který už U Apolináře nemá podobu drsného zacházení a bodového systému, jaký je vidět třeba ve filmu Dobří holubi se vracejí. S sebou si pacienti mohou vzít mobil i počítač. Jen je nepoužívají kdykoliv během dne, ale pouze v osobním volnu. Jak vypadá režim hospitalizační léčby, v rozhovoru pro Vitalia.cz popsal pan Tomáš.

Schéma proměny péče pro závislé ve VFN

Takto se proměnila v druhé polovině roku 2024 struktura péče o závislé ve VFN. Zkratka CDZ znamená Centrum duševního zdraví, které ve VFN teprve otevřou.

Autor: VFN

Pro někoho je cestou léčba pitím

Jedním z posunů v léčbě alkoholismu je změna názoru, že kdo se chce léčit ze závislosti, musí vždy dokázat plně abstinovat. 

Spektrum intervencí je dnes radikálně někde jinde včetně například alternativy v podobě kontrolovaného pití. Ukazuje se totiž, že u části pacientů, kteří jsou v časné fázi rozvoje problémů, je možné obnovit zpětně kontrolu nad užíváním, říká Michal Miovský.

Pro laika překvapující metoda přebírá podle profesora koncept osvědčený v zahraničí. Kontrolované pití totiž znamená, že pacient spolu s lékařem stanoví nepodkročitelnou, stabilní dávku alkoholu i četnost jejího užívání. Díky tomu se závislý učí vyhýbat spouštěčům rizikových situací a také třeba může pozvolna denní dávku alkoholu snižovat. 

Bavíme se ale skutečně jen o některých pacientech a jen o časném stadiu. Jde o relativně malý počet lidí, ale nemůžeme se tvářit, že neexistují, zdůrazňuje Michal Miovský. Podle něj už neplatí jediná možnost uplatňovaná dříve, tedy buď abstinence, nebo konec nároku na léčbu. Prefabrikovaný, klasický přístup u mnoha pacientů selhává, protože buď jsou vyhozeni, nebo sami bouchají dveřmi, a to není to, co bychom chtěli.

Ještě lépe je prý tato otočka vidět třeba u pacientů, kteří užívali opiáty a v rámci léčby jim je zdravotníci nahradili tzv. substitucí. Podle Miovského se už považuje za nesprávný a překonaný přístup situace, kdy klinika odmítne hospitalizovat pacienta na substituci. V diagnostickém manuálu je jasně napsáno, že s takovým pacientem má být zacházeno jako s abstinujícím, protože má lék, dodává lékař s tím, že něco takového se v minulosti rozhodně automaticky nedělo.

Lékaři se učí na pacienta počkat

Trpělivost by lékař měl projevit nejen u pacienta s rizikovým pitím v prvopočátcích, ale také u toho, který je v užívání alkoholu dál a třeba už má rozvinutou závislost.

Jak Češi a Češky pijí

V České republice podléhá rizikovému pití 1,5 milionu lidí, nejvíce ve věkové skupině 45 až 54 let. Podle přednosty Kliniky adiktologie by však alespoň krátkou intervenci kvůli alkoholu potřebovalo odhadem až 3,5 milionu lidí.

Za rizikové pití se považuje konzumace více než 20 g 100% etanolu za den u žen a 40 g 100% etanolu u mužů, jiná měřítka uvádějí 40 g 100% etanolu za den u žen a 60 g 100% etanolu u mužů. Pro představu jeden půllitr piva obsahuje 16 g etanolu, jedna sklenka vína (20 ml) 17 g etanolu a 1 odlivka destilátu (50 ml) o síle 40 % obsahuje 16 g etanolu.

Nebo jinak: Již jedna sklenka alkoholu může být riziková, pokud po jejím vypití nastupuje nutkavý pocit potřeby té druhé, vzkazují odborníci. Pravidelné pití alkoholu, a to se týká třeba i piva, zvyšuje rizika výskytu některých závažných onemocnění a komplikuje léčbu jiných zdravotních problémů. 

Jak je ale možné, že v ČR pije tolik lidí, když negativa alkoholu jsou podložena desítky let? Alkohol je pro naše prostředí typickou kulturní drogou. Je to něco, co se ve společnosti formuje téměř dva tisíce let a s čím se naše společnost učila postupně sžívat, ale dodnes se nám to nedaří, vysvětluje Michal Miovský. 

Změna přístupu znamená, že když pacient odmítne třeba hospitalizaci, tak já s ním pracuji i nadále v ambulanci, kde jej třeba mohu stabilizovat na určité hladině spotřeby, můžeme se spolu vyhnout nejvíce rizikovým situacím a posílím jej motivačně, protože motivace je královnou našeho oboru. A to, že by vznikala během jednoho našeho setkání, je chiméra, popisuje přednosta Miovský.

Podle něj je třeba neztratit s pacientem kontakt a nenechávat další krok jen na něm. Nečekat, že si sám uvědomí chybu a přijde, ale k rozhodnutí ho motivovat. Podle Miovského tento přístup mezi psychology, psychiatry a adiktology začal silně rezonovat a již existují první instituce, které se k němu otevřeně hlásí.

Čekání na rozhodnutí pacienta respektují i nově vznikající ambulance s rozšířenou péčí. Ve VFN mají takové dvě a budou přidávat třetí. Bavíme se o ambulancích o počtu šesti až deseti pracovníků včetně sociálních služeb, zdůrazňuje lékař. 

Díky tomuto konceptu najde pacient na jednom místě komplexní služby, protože v ambulanci působí kromě adiktologa také třeba psychiatr, psychoterapeut, sociální pracovník, rehabilitační lékař nebo fyzioterapeut.

Jsou to právě tyto ambulance, které systému pomoci podle Miovského chybí nejvíce. Ačkoli jejich koncept byl zanesen už před lety do reformy psychiatrie, stále nejsou samozřejmou součástí péče. Tyto vysoce specializované ambulance jsou trendem v našem oboru. Tím, co je potřeba, ale zároveň tím, co je nedostupné, uvádí Michal Miovský a označuje tento stav za skutečně velkou bolest adikologie.

Pomůže virtuální realita

Na začátku zmíněné kontrolované pití také není jedinou cestou, jak se naučit vyhýbat rizikovým situacím. Jinde, například ve FN Plzeň, na to podle Miovského jdou s využitím virtuální reality.

V jejím prostředí například lékař namodeluje situaci, kdy je pacient s přáteli na oslavě a snaží se chovat tak, aby nesáhl po alkoholu. 

Aplikace v mobilním telefonu zase cílí na zvládnutí tzv. bažení. Pacient zaznamenává jeho výskyt a intenzitu a aplikace vyhodnocuje, zda už je na místě nabídnout pomocnou intervenci. Případně, když je bažení velmi silné, může aplikace přivolat pomoc, aby pacient měl podporu lékaře v destabilizovaném stavu, s nímž se mohou pojit třeba úzkosti nebo deprese. 

Pít jsem chodil po práci, říká Tomáš, který se u Apolináře léčí ze závislosti na alkoholu Přečtěte si také:

Pít jsem chodil po práci, říká Tomáš, který se u Apolináře léčí ze závislosti na alkoholu

Přibývá soukromých klinik 

U novinek v léčbě nemůžeme pominout fakt, že přinejmenším v okolí Prahy vznikají v posledních letech soukromá zařízení, která nabízejí jak ambulantní služby odborníků, tak pobytovou léčbu. Na rozdíl od nemocnic si je ale klienti hradí sami. U pobytů přitom nejde o žádnou levnou záležitost. V zařízení lze trávit až osm týdnů a cena se v takovém případě šplhá nad čtvrt milionu korun. 

To, že vznikají, je v pořádku. Klientela tady je, takže mají svoje místo na trhu. Pacientů je takový převis, že o svoji práci se nebojíme. Naopak adiktologie jako obor může chrlit jakýkoliv počet odborníků a stejně zůstane nulová nezaměstnanost absolventů, protože trh je nenasytný a nenasycený, říká Michal Miovský.

Podle něj vstup privátní sféry do adiktologie přináší také to, že tento medicínský obor je konečně pro mediky atraktivní. Za citlivý ovšem považuje fakt, že spolu se soukromými klinikami se ty nemocniční mohou přetahovat o odborníky.Cesta je, aby se zaměstnanci ve fakultní nemocnici cítili dobře, říká přednosta Apolináře.

Trendem v prevenci je motivovat

Mění se i přístup k prevenci, kde Miovský vidí také velké rezervy. Cílem je, aby lidé nezačali pít vůbec. A když už pijí, aby s tím začali v dospělosti, co nejpozději a pili co nejméně.

Jedna koruna investovaná do prevence se vrací desetkrát. Ušetříme na zdravotní péči, sociálních nákladech, ušlé produktivitě a související kriminalitě, vysvětloval na nedávné tiskové konferenci VFN věnované tématu závislosti na alkoholu Roman Gabrhelíkvedoucího Expertního adiktologického centra.

Aby prevence fungovala, musí být srozumitelná, atraktivní a moderní. Musíme umět reagovat na nové trendy, kterými jsou problémy spojené s užíváním internetu a digitálních prostředků, dodává Gabrhelík.

Podle něj hlavním sdělením prevence už není NE. Neříkat to NEdělej, NEužívej, ale je potřeba pozitivně motivovat, tedy ukazovat, co dělat jiného. Jakým způsobem si můžu vynahradit, co mi v životě chybí, abych to nemusel kompenzovat třeba alkoholem, dodává lékař.

Klíčovou pro prevenci zůstává spolupráce mezi školami, odborníky a rodinou. Struktura pomoci existuje, stejně tak jako nástroje prevence. Podle Gabrhelíka ale nejsou informace všeobecně dostupné, a to ani odborníkům. Proto se VFN spolupodílela na vzniku Interaktivní platformy podpory duševního zdraví a prevence rizikového chování (IPREV). Informace o prevenci jsou odborníkům jednoduše a široce dostupné na webu IPREV.

Autor článku

Redaktorka Vitalia.cz. Vystudovala žurnalistiku a češtinu na Univerzitě Palackého v Olomouci, pracovala v Deníku, na webu TV Nova a iDNES.cz. Píše o zdravotnictví. Je držitelkou novinářských cen Psychiatrické společností ČLS JEP za rok 2021 a 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 »