Blokáda žeber může bolet úplně jinde

Sdílet

Akutní a velmi bolavé, nebo chronické a převelice otravné. Bolesti, které se rády vracejí a jejich návrat si způsobíte více než snadno. Blokády žeber jsou často spojené s hypermobilitou kloubů, dlouhodobým přetěžováním svalů nebo skoliózou. Jak si pomoci sami a minimalizovat riziko návratu obtíží?

Blokády žeber si lze představit jako chvíle, kdy se kvůli svalové nevyrovnanosti nebo náhlému pohybu žebro pohybuje nepřirozeně a povyskakuje od hrudní páteře, na kterou je zavěšeno. To vytváří drobné svalové křeče a zřetězené bolesti a křeče dalších svalů – a že jich podél žeber je! Vzhledem k tomu, že tato oblast je bohatá na drobné svaly a nervová zakončení, je škála bolestí opravdu široká.

Projevy blokády žeber jsou velmi pestré

Typické jsou bolesti v oblasti hrudní páteře, bodavé bolesti na hrudníku, citlivá hrudní kost, žebra a bolesti či pálení podél žeber či ve středu na chrupavce, která žebra spojuje.

Při blokádě horních segmentů žeber může jít i o pocit stísněnosti, bušení srdce a snadno vznikající úzkostný stav, s blokádou čtvrtého žebra bývají často spojené i bolesti a napětí v krční páteři a bolesti hlavy, či až migrény. U blokád spodních žeber cítíme někdy až náběh na zažívací potíže, problémy podobné refluxu a citlivé svaly na břiše. Bolesti páteře jsou potom spíše pod lopatkami ve spodní části hrudní páteře. Vše nás může bolet při nádechu, slyšet můžeme křupání, bolest většinou bývá přesně lokalizovaná, píchavá u páteře, různě se roztahující do svalů, pálivá, tupá – a může se stěhovat.

Přenesené bolesti z orgánů jsou strašákem každého, kdo na blokády trpí, protože rázem začnete kvůli otravnosti a vleklosti bolestí přemýšlet, jestli nemáte nemocný žaludek, játra, srdce, a to i když lékař všechno vyloučí. Žlučník, žaludek apod. se většinou projevují křečovitě, bolesti mají svůj rytmus, případně jsou vázány na jídlo, námahu, zadýchání. Uklidnit nás může to, že bolesti pohybového aparátu jsou naproti tomu závislé na pohybu, úhlu pohybu, často i nepatrném.

Většinou každý ví, jaký pohyb mu nedělá dobře a je spouštěčem. Stačí jedna taška s nákupem těžší než dvě kila a s přidruženou skoliózou či hypermobilitou máte na pár týdnů o „zábavu nápravou“ postaráno.

Blokády horních žeber

  • Příznaky se řetězí i do krční páteře, migrény, bolí rameno, meziprstní řasy na ruce. Blokáda čtvrtého žebra někdy napodobuje infarkt vlevo, na pravé straně pak pocit jako při průstřelu. Problémy s nádechem, bolesti pod lopatkou.
  • Co pomáhá při akutních problémech? Nahřívání, přiměřené procvičování a posilování mezilopatkových svalů i krční páteře (ale pozor, někdy cviky s prohnutím páteře vzad mohou spíše škodit) a dechová cvičení, kdy je třeba se vyvarovat povrchního dýchání do horní části hrudníku či klíčních kostí, které kosti v hrudníku ještě více blokuje. Učte se dýchat do břicha.

Blokády spodních žeber

  • Dloubání pod lopatkou, svalové spasmy se šíří až do křížovo-kyčelního skloubení (esíčko), bolesti kříže až do nohy jako při výhřezu ploténky. Spodní volná žebra vedou bolesti do oblasti žaludku či břicha. Tady je třeba naučit bránici roztahovat, opět dýcháním do spodní části břicha, a to hlavně směrem dolů, k pánevnímu dnu.
  • Co pomáhá při akutních problémech? Nahřívání, hlídání si rovného držení těla, cviky roztahující spodní žebra a bránici.

Jak blokády vznikají?

Příčin je mnoho. Častým nešvarem je špatné dýchání, povrchní dýchání, jež přetěžuje svalstvo krční páteře a ramen – což je snadná cesta k blokádám vrchních žeber. Poznáte to tak, že vaše ramena jsou skrčena směrem k hlavě. To je často naučená svalová dysbalance z nošení těžkých tašek, kabelek, ale i batohů. Vadné držení těla posilují i moderní trendy plochého břicha, máme-li břicho zatažené ve vidině štíhlého pasu, nehýbe se, bránice stojí, nemůže se rozvíjet a automaticky dýcháme vrchní částí hrudníku, což vede k blokádám.

VIDEO: Zablokovaný hrudník a mezižeberní svalstvo 

Zdroj: YouTube

Svaly často nemáme v pořádku. Pak stačí dlouhodobé přetížení – shrbené sezení, noha přes nohu, nošení těžkých tašek přes rameno, náhlý pohyb (trhnutí v MHD), ale při hypermobilitě páteře (zvýšená pružnost vaziva kolem páteře a kloubů, vazivo pak neudrží žebro ve správném postavení, pustí ho „dál, než je zdrávo“) stačí i na podpatku vyvrknutá noha – a snadno si přivodíme blokádu žebra nebo obratle.

Psychosomatické příčiny blokády žeber

Zapátráme také po psychosomatických příčinách. Blokády v hrudní páteři souvisí s tím, kolik toho neseme, s nespokojeností, s nespravedlností. Tvrdošíjně můžeme prosazovat svoje názory, své vize, zároveň však trpíme pocitem, že jsme dali světu tolik dobrého a nic se nám nevrátilo. Je třeba se s životem smířit jako s takovým, jakým je. Nečekat zlepšení a nápravu od „viníků“, ale naučit se vrátit pružnost do nádechu a nadechnout se toho, co právě máme. Najít v tom moudrost a nebát se o budoucnost. Tímto uklidněním se zmírní i síla těch negativních útoků zvenčí.

A to je i důvod, proč právě žebra jsou velmi citlivá na stres a není vyloučeno, že blokádu žeber si lze navodit i stresovou stažeností, úzkostí. Jako podpůrnou terapií si lze velmi pomoci prodýcháváním bolestivých míst nebo meditací, která celkově uvolní napětí v těle.

Co s tím vším? Pomůže dobrý fyzioterapeut a změna životního stylu

Prvotní je diagnóza tohoto problému, s čímž vám pomůže fyzioterapeut, ortoped nebo rehabilitační lékař. Pokud máte páteř relativně zdravou a jde jen o následek nevhodného pohybu, je terapie většinou vyřešena za pár dnů či týdnů.

V případě chronických potíží nebo při skolióze či nevhodné dlouhodobé zátěži se pak můžete připravit na mnohatýdenní či mnohaměsíční boj. V něm bude hlavní roli hrát to, jak dokážete ze svého života eliminovat škodlivé návyky a nahradit je zdravými. A trpělivost s cvičením. Akutním bolestem ulevuje nahřívání suchým teplem, v mnohých případech stačí pár „obstřiků“ nebo aplikace gelů proti bolesti či tejpování.

Důležitá je ale fyzioterapie, často i opakovaně prováděná mobilizace bolestivých žeber a cvičení (hlavně doma), které se mění podle toho, jak se mění váš stav.

Jóga, nebo MUDr. Smíšek?

Na podobné problémy je téměř bezkonkurenční cvičení s pružným lanem podle MUDr. Richarda Smíška. Stabilizace hlubokého svalového systému podél páteře a v těle je totiž základem všech svalů, které drží páteř i svaly tam, kde mají. Tento systém pomalého cvičení může i citelně vyléčit a zlepšit těžké skoliózy nebo výhřezy plotének. Omezí i blokády žeber. Cvičení má jen jednu nevýhodu – je dobré několikrát cvičit pod dohledem zkušeného fyzioterapeuta, protože systém dýchání a přesnost pohybů jsou velmi důležité a není lehké sám na sobě vychytat chyby. Výhoda je veliká, při správném provádění stačí týden a ucítíte zlepšení v přirozeném držení těla. V dalších týdnech pak přijdou i další benefity – ustoupení bolestí.

Galerie: Spirální stabilizace páteře – metoda dr. Smíška 

Jóga se také často doporučuje pro zdravá záda. Zde je nutno podotknout, že jóga je primárně určena pro lidi se zdravými zády se zdravým zatížením jako cvičení posilující, protahující. S akutní nebo chronickou blokádou žeber je riziko, že si některými pohyby stav ještě zhoršíte. Některé cviky můžete zařadit po poradě s fyzioterapeutem, vždyť mnohé cviky při rekonvalescenci se s jógou shodují.

Vyzbrojte se trpělivostí, je čas naučit se poslouchat svoje tělo, nebrat ho jako svého sluhu bez omezení, uvolnit psychiku a být trpěliví.

Autor článku

Věnuje se zejména článkům na téma vztahy a zdraví v různých magazínech. Je mj. autorkou knih pro budoucí a čerstvé maminky.  Na Vitalia.cz uplatňuje svou zvídavou povahu v článcích o jídle a zdraví i tipy, jak si neškodit nejrůznějšími návyky.

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