Nejúčinnější léčbou závratí je rehabilitace. Vyžaduje trpělivost, ale většinou zabírá

16. 12. 2024

Sdílet

Autor: Depositphotos
Závrať je zdravotní problém, který není dobré ignorovat, ani se s ním rezignovaně sžívat. I když najít pracoviště, kde se závratí skoncují, nemusí být úplně snadné. Pokud se to podaří, máte vysokou šanci, že vás lékaři nepříjemných stavů trvale zbaví.

Poruchy rovnováhy ročně postihnou až 15 procent dospělé populace, tedy stovky tisíc lidí. S vyšším věkem se jejich počet zvyšuje, takže až 40 procent starších 40 let se setká s potížemi s rovnováhou.

Co se dozvíte v článku
  1. Jak začít s vyšetřením a léčbou
  2. Jak se léčí závratě
  3. Jak dlouho trvá léčba

Dobrou zprávou pro pacienty je, že závratí se lze s pomocí lékařů zbavit. Většinou i trvale, ale někdy je to dlouhodobý proces, často na týdny a měsíce.

Horší zprávou už je, že i když někoho závratě trápí delší dobu, stejně se nemusí dostat na pracoviště, kde by jeho zdravotní stav řešili neurologové, ale také zároveň ORL specialisté, fyzioterapeuti a třeba i psychologové. Síť center léčby závratí totiž v zemi neexistuje a tato multidisciplinární pracoviště působí spíše ojediněle. Nejdelší tuzemskou tradici má Neurootologické centrum (Centrum poruch rovnováhy) v pražské Fakultní nemocnici Motol.

Aby léčba byla úspěšná, je přitom spolupráce zdravotníků napříč odbornostmi klíčová, protože závratě mohou vznikat z mnoha příčin. Týkají se onemocnění vnitřního ucha, nervové soustavy včetně mozku, pohybového aparátu nebo kardiovaskulárních a metabolických nemocí.

Co je to závrať a kdy k ní dochází

Závrať (vertigo) je projevem poruchy rovnováhy. Dochází k ní při narušení fungování některých z receptorů, které mozku vysílají informace, na jejichž podkladě se v prostoru cítíme orientovaní a ukotvení. Mezi systémy, které nás informují o poloze, patří zraksvalové receptory (v oblasti chodidel a šíje) a rovnovážné (vestibulární) ús­trojí ve vnitřním uchu. Závrať vyvolávají zánět, úraz nebo třeba mrtvice. K závratím může dojít i při poruše rovnovážných center v mozku. Přijít mohou ale i bez zjevné příčiny.

Vzniká náhle, nebo i pozvolným zhoršováním příznaků. Její průběh může být jednorázový, nebo se projevuje v podobě opakujících se záchvatů. Závrať může mít i permanentní průběh, kdy příznaky samy neodeznívají.

Projevuje se jako rotační, tedy se subjektivním pocitem, že se pohybuje prostor kolem pacienta nebo on se pohybuje v něm. Takové stavy zpravidla doprovází také nestabilita, rozostřené vidění nebo zvracení. Jako závrať či poruchu rovnováhy označujeme také stav, kdy pacient má natolik narušený pocit stability, že není schopen stát nebo jeho chůze působí, jako by byl silně opilý.

Jak začít s vyšetřením a léčbou

Až na výjimky léčba závratě začíná u praktického lékaře. Ten totiž dokáže vyloučit, nebo potvrdit, že za pocity motání hlavy, vrávorání či jiné projevy může třeba vysoký tlak, nežádoucí účinky léčby, neléčená cukrovka nebo nedostatek některých minerálů v těle.

Praktický lékař má o pacientovi nejvíc informací a je schopen rozhodnout, zda pacienta poslat ke specialistovi (neurolog, ORL) nebo akutně do nemocnice.

Vznikne-li závrať náhle, doporučuje se rovnou volat záchranku a nechat se převést do nemocnice. Okamžitý odjezd k lékaři odborníci doporučují také ve chvíli, kdy náhle vznikne závrať a doprovází ji zároveň jiný příznak. Třeba porucha koordinace, oslabení končetin, poruchy čití (narušení vnímání doteku, tlaku, tahu, polohy, bolesti) nebo také ztráta sluchu. 

Někdy se totiž právě takto projevují infarkt či mrtvice, při nichž jde o život. Ne, že by každá náhlá závrať musela znamenat ohrožení života, ale v případě podezření na něj je lepší neváhat a nechat se vyšetřit.

Trpí u vás doma někdo závratěmi?

Jak se léčí závratě

Pokud lékaři příčinu znají, s vysokou pravděpodobností pacienta závratě zbaví. Platí ale, že žádná zázračná pilulka nebo ušní kapky neexistují a jedna návštěva v ordinaci nepostačí, protože stejně, jako jsou rozmanité příčiny závratí, je rozmanitá i jejich léčba. 

Prim v léčbě hraje jednoznačně rehabilitace. Vyžaduje ale spolupráci pacienta a jeho vytrvalost.

Režimová opatření

Změna režimu typicky pomáhá u závratí, které jsou projevem migrény (tzv. vestibulární migréna). Patří mezi ně třeba omezení alkoholu nebo úprava spánkového režimu. Tato léčba je velmi individuální a v případě migrény se většinou neobejde bez užívání léčiv.

Galerie: Jak vypadá laboratoř, kde diagnostikují a léčí závratě

Farmakologická léčba

Je u závratí velice různorodá a zahrnuje široké spektrum léků. Lékaři nasazují buď ty, jež v akutním stavu utlumí subjektivní pocit závrati a zastaví zvracení, nebo ty, které přímo ovlivňují struktury vnitřního ucha. Jde třeba o betahistin, jenž se používá pro zlepšení prokrvení vnitřního ucha, říká neurolog Jaroslav Jeřábek, jenž působí v motolském Neurootologickém centru na Neurologické klinice.

Jejich užívání je důležité třeba u závratí při migréně nebo při tzv. Ménièrově chorobě, protože účinné jsou zejména u pacientů, u nichž má závrať podobu opakujících se záchvatů. 

Rehabilitace

Mezi léčebnou rehabilitaci, která se používá u tzv. benigního paroxysmálního polohového vertiga, patří například repoziční manévry. Při nich lékař nebo fyzioterapeut dokáží rotační polohovou závrať vyřešit speciálním polohováním hlavy. Cílem je ve vnitřním uchu přesypat miniaturní krystaly uhličitanu vápenatého zvané otolity z polokruhového kanálku zpět do otolitového váčku, kam správně patří. Až v 95 procentech případů závrať způsobenou takto vyřešíte, byť opakováním manévrů, podotýká Jaroslav Jeřábek.

Galerie: Proč máme závratě a jak se projevují

Léčba závratí je také často spojována s takzvanou vestibulární rehabilitací, jež je zaměřena na na funkci rovnovážného ústrojí a provádí ji speciálně vyškolení fyzioterapeuti. 

Je to cvičení cíleně zaměřené na koordinaci pohybu očí a hlavy nebo pohybů hlavy a trupu, vysvětluje Jeřábkův kolega, neurootolog Lukáš MartinkovičFyzioterapeuti jej každému pacientovi sestavují na míru. Zahrnují třeba pohyby hlavou, chůzi, stoj nebo cvičení pro koordinaci zraku a pohybu. 

Role rehabilitace je při léčbě závratě klíčová. A to u léčby veškerých závratí a poruch rovnováhy, protože patří mezi nejlépe ověřenou metodu, jež svým efektem převyšuje i léčbu farmakologickou. Důležité pro její úspěšnost ale je, aby začala co nejdříve po započetí obtíží, zmiňuje Lukáš Martinkovič.

Časná rehabilitace je také důvodem, proč se lékaři snaží pacienta co nejdříve aktivovat, byť trpí třeba postižení rovnovážného nervu, tzv. vestibulární neuritidou. Doprovází ji úporné zvracení, pocení a velmi silná rotační závrať, kvůli které nemocný nedokáže vstát z lůžka. V akutní fázi pomohou léky, ale k návratu rovnováhy je nutná včasná rehabilitace.

Jak je ale možné, že v případě závratí předčí rehabilitace léky? Při rehabilitaci dochází u pacienta ke změně vnímání stability v prostoru, což je klíčem pro to, aby závrať odezněla. Díky rehabilitaci dokážete přeučit mozek, aby použil jinou strategii pro udržování rovnováhy, protože rehabilitace podporuje kompenzační mechanismy centrálního nervového systému, vysvětluje Jaroslav Jeřábek.

Kdy a komu uhradí pojišťovny fyzioterapii? Důležité je neprošvihnout platnost poukazu Přečtěte si také:

Kdy a komu uhradí pojišťovny fyzioterapii? Důležité je neprošvihnout platnost poukazu

Psychoterapie

Je důležitá jednak proto, že malá část závratí může mít psychosomatický původ, ale také proto, že pocity spojené se závratěmi, mezi které patří obava ze ztráty kontroly nad svým tělem a strach z pádu, mohou postupně vést k úzkostem nebo se rozvinout v depresi.

Málokdo si uvědomuje, že třeba akutní rotační závrať je pro pacienta subjektivně nepříjemnější než bolest, říká Jaroslav Jeřábek. Pacient je totiž extrémně stresovaný tím, že najednou ztratí pojem o tom, co je nahoře, co dole, nevidí ostře, není schopný se pohybovat, a navíc jej tento stav může postihnout kdekoliv, třeba i na ulici. Proto se musí od začátku pracovat i s jeho psychikou a zabránit tomu, aby se při opakovaných záchvatech závratí u něj vytvořilo úzkostné očekávání, kdy přijde další, vysvětluje lékař.

U polohových závratí je také potřeba pacienty uklidnit, že nemoc nevzniká v důsledku závažného onemocnění mozku, protože řada pacientů má právě z tohoto obavy, byť k nim není důvod, protože takové příčiny závratí jsou velmi vzácné.

Další metody

K léčbě závratí v Motole využívají také virtuální realitu. Jde ale především o pacienty, které čeká operace kvůli nádoru v mozku. Více jsme o použití virtuální reality psali zde.

Pomineme-li vynětí nádoru tzv. VIII. hlavového nervu, tedy většinou vestibulárního schwannomu, chirurgicky se závratě v podstatě neléčí.

Poprvé řekl „mámo“ a „táto". Pětiletý chlapec může díky unikátní operaci slyšet i mluvit Přečtěte si také:

Poprvé řekl „mámo“ a „táto". Pětiletý chlapec může díky unikátní operaci slyšet i mluvit

Jak dlouho trvá léčba

Délka léčby je individuální. Třeba akutní léčba závratí u poruch rovnovážného nervu podle Lukáše Martinkoviče trvá zhruba týden. Další až měsíc u pacientů mohou přetrvávat pocity nejistoty, nestability, opakované dočasné točení hlavy. Nadpoloviční většina pacientů se z těchto stavů dostane. Zhruba čtvrtina pacientů ale má trvalé obtíže, které se řeší rehabilitací, popisuje lékař.

Relativně krátká může být léčba pomocí repozičního manévru, kdy se přesypávají otolity. Tam stačí kromě úvodních vyšetření teoreticky jen jedna návštěva. Ovšem polohová závrať se umí někdy vracet.

Naopak třeba u vestibulárních migrén trvá léčba léta, někdy většinu života pacienta. Zdlouhavá také může být terapie ve speciální laboratoři. Už jen vstupní vyšetření třeba u chronického pocitu nestability trvá minimálně jednu hodinu i déle. Samotná diagnostika může vyžadovat i několik hodin rozdělených do více dnů. Pacient proto musí k lékaři opakovaně.

Odborná spolupráce:

Doc. MUDr. Jaroslav Jeřábek, CSc.

Neurolog, ve Fakultní nemocnici Motol stál na počátku vzniku Neurootologického centra, kde dodnes působí. Založil také tradici neurootologických kurzů pro lékaře a letos byl organizátorem prvního tuzemského ročníku Světového týdne rovnováhy. Je čestným členem odborné České neurologické společnosti a vyučujícím na 2. lékařské fakultě Univerzity Karlovy.

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 »