Krvácení z nosu většinou samo přestane. Kdy volat na pomoc lékaře?

12. 3. 2023 9:00
přidejte názor

Krvácení z nosu je zdravotní komplikace, se kterou se jednou za čas potká téměř každý z nás. Mezi nejčastější příčiny patří poranění v přední části nosu, nachlazení, časté smrkání nebo třeba pobyt v nevhodném ovzduší, krvácet však můžete i bez jakéhokoliv předchozího varování. Ačkoliv se ve většině případů podaří krvácení brzo zastavit, někdy je nutné pro jistotu vyhledat lékařskou pomoc. 

Co způsobuje krvácení z nosu?

Krvácení z nosu (epistaxe) se může objevit v jakémkoliv věku a údajně postihne během života každého sedmého člověka. Častější je tato zdravotní komplikace u menších dětí, ale hojně se vyskytuje také u dospělých po padesátce. Obvykle jde ruku v ruce s bolestí hlavy, což způsobuje náhlá krátkodobá ztráta krve.

Na jaké další problémy si lidé stěžují?

  • krvácení z nosu v noci,
  • krvácení z nosu po ránu,
  • krvácení z nosu před menstruací,
  • krvácení z nosu při menstruaci,
  • krvácení z nosu při rýmě.

Důvodem je většinou narušení či poranění drobných cév uprostřed nosní přepážky, kdy krvácení z nosu zpravidla během několika málo minut samo odezní. Pokud je ovšem tato zdravotní komplikace způsobena nějakým vážnějším úrazem, jako je třeba úder do hlavy, nebo trvá déle než půl hodiny, rozhodně byste ji neměli podceňovat. [1, 2, 34]

Jaké má krvácení z nosu příčiny?

Krvácení z nosu může mít celou řadu různých příčin, od banálních důvodů až po ty nebezpečné. V přední části nosu se nachází bohatá cévní výplň a krvácení je proto často způsobeno přílišnou křehkostí cév. Mezi další příčiny krvácení z nosu patří:

  • vdechování suchého vzduchu,
  • šťourání v nose,
  • silné kýchání a smrkání,
  • alergie spojená s rýmou,
  • infekce a nachlazení,
  • poruchy srážlivosti krve,
  • užívání návykových látek,
  • ateroskleróza,
  • nádor v dutině nosní,
  • prasknutí větší tepny uložené hlouběji v nosní dutině.

Při rýmě, nachlazení a viróze bývá nosní sliznice překrvená, což vede k tomu, že je také náchylná ke krvácení z nosu při smrkání či kýchání. Epistaxí častěji trpí také lidé, kteří užívají preparáty určené k ředění krve (antitrombotika) či léky, které zlepšují prokrvování (vasoaktiva, vasodilatantia).

U starších osob může silné a časté krvácení z nosu a bolest hlavy signalizovat vysoký krevní tlak. V takovém případě totiž cévami proudí větší množství krve a při přetlaku některá z nich snadno praskne. Vysoký krevní tlak může být velice nebezpečný, způsobuje poškození, ucpání a popraskání cév, ale může vést dokonce i k selhání srdce či mrtvici.

Začala vám téct krev z nosu zničehonic? Na vině může být také Von Willebrandova choroba, což je vrozené onemocnění srážlivosti krve, které trápí asi 1 % populace. Jeho projevy jsou podobné jako u klasické hemofilie, ale bývají spíše mírnější. Kromě spouštění krve z nosu sem patří třeba zvýšená tvorba modřin a petechií, pomalejší srážení krve při běžných úrazech nebo silná menstruace.

Jedním z dalších důvodů krvácení je pak samozřejmě i poranění nosu, a to buď vlivem nejrůznějších úrazů v domácnosti, venku či během sportu, nebo když pacienta někdo do nosu uhodí, nešťastnou náhodou, nebo třeba při vyostřené potyčce. U některých pacientů krvácení z nosu způsobuje také nedostatek vybraných vitamínů nebo užívání léků, jako je třeba aspirin. [5, 6, 7, 8, 9, 10]

Přední a zadní krvácení z nosu

Lékaři rozlišují dva typy krvácení z nosu, a to konkrétně přední a zadní. Pokud jde o přední krvácení, postiženy jsou malé krevní cévy v přední části nosu. Jelikož se obvykle nejedná o žádnou vážnou zdravotní komplikaci, není nutné kontaktovat lékaře, krvácení by totiž mělo samo dříve či později ustat.

Mnohem větší problém představuje zadní krvácení z nosu, které je způsobené poraněním větších cév, jež se nacházejí hlouběji v dutině nosní. Takové krvácení z nosu je obtížné zastavit a z toho důvodu je obvykle nutné vyhledat pro jistotu lékařskou pomoc. [11, 12, 13, 14, 15]

Jak často vás trápí krvácení z nosu?

Jak zastavit krvácení z nosu?

Jaká je pro náhlé krvácení z nosu první pomoc? Zastavit krvácení z nosu se dá většinou v několika jednoduchých krocích. Nejprve vsedě mírně předkloňte hlavu, aby vám krev nestékala do úst, a s citem si zmáčkněte nosní křídla palcem a ukazováčkem na místě, kde na nos obvykle dosedají brýle. V této poloze byste měli vydržet po dobu minimálně 5–10 minut, lepší je však počkat delší dobu.

Co se týče studeného obkladu, někteří lidé doporučují jeho přikládání na čelo a zátylek, podle jiných ovšem samovolné krvácení z nosu zmírní spíše pytlík s ledem přiložený ke kořeni nosu, který způsobí stažení cév. Po konzultaci s lékařem můžete pro zastavení krvácení z nosu použít také dekongestantní nosní sprej, který pomůže se stažením cév.

Existují samozřejmě dobré rady, co dělat, když teče krev z nosu, ale některým věcem byste se zároveň měli vyvarovat. Nos byste sami neměli ničím ucpávat a hlavu byste při krvácení z nosu neměli zaklánět dozadu. To by totiž mohlo způsobit zatékání krve do polykacích cest a následné zvracení.

Jakmile silné krvácení z nosu ustane, je dobré ještě na nějakou chvíli setrvat v klidu. Zapomeňte na jakékoliv příliš prudké pohyby, nepijte horké nápoje a nejméně hodinu se snažte nesmrkat, jinak by totiž krvácení mohlo začít nanovo. [16, 17, 18, 19, 20, 21, 22]

Kdy je dobré vyhledat lékaře?

Pokud se objeví masivní krvácení z nosu, které není možné zastavit a celá situace trvá déle než 20 minut, je nutné neprodleně vyhledat lékařskou pomoc. Návštěvu doktora samozřejmě vyžaduje také opakované krvácení z nosu, jakýkoliv úraz hlavy, zranění, jako je například zlomenina nosu, nebo přítomnost cizího tělesa v nosní dutině, které nelze vlastním přičiněním vytáhnout. [23, 24, 25, 26, 27]

Léčba krvácení z nosu

Pro zastavení krvácení z nosu je nejprve nutné určit příčinu, která tento nepříjemný stav vyvolala. Pokud jde o zranění, je nutné ho dostatečně ošetřit nebo vytáhnout cizí těleso z rány. Jestliže problém vyvolaly léky na ředění krve, pacient by je měl na nějaký čas vysadit. Těžší a opakované krvácení z nosu může vyřešit kauterizace, což je vypalování nosních cévek.

Co na krvácení z nosu dále pomáhá? Pokud se vám krvácení z nosu nedaří zastavit a vyhledáte lékaře, může vám doporučit také některý z následujících zákroků:

  • anemisace – umístění vatových tamponů se Sanorinem do nosu,
  • chemokoagulace – ošetření postiženého místa pomocí dusičnanu stříbrného,
  • elektrokoagulace – ošetření pomocí kauteru,
  • odsátí krve z nosu,
  • přední a zadní balonková tamponáda.

Co se týče prevence krvácení z nosu, nosní sliznici je dobré udržovat přiměřeně zvlhčenou, aby nedocházelo k jejímu vysoušení, praskání a následnému krvácení. S tím vám mohou pomoci třeba různé zvlhčovače vzduchu, které se hodí zejména v chladnějších měsících. Během zimního období je také dobré používat nosní sprej, jenž zvlhčuje nosní membrány. [28, 29, 30, 31, 32]

Von Willebrandova choroba patří mezi krvácivá onemocnění. Co způsobuje?
Přečtěte si také:

Von Willebrandova choroba patří mezi krvácivá onemocnění. Co způsobuje?

Krvácení z nosu v těhotenství

Jelikož se v průběhu těhotenství musí ženské tělo potýkat s velkým množstvím hormonálních změn (zvýšení hladiny estrogenu a progesteronu), často dochází také ke zduření sliznic a jejich podráždění. Z toho důvodu si pak nastávající maminky stěžují na ucpaný nos, zhoršené dýchání, časté smrkání nebo také na krvácení z nosu.

S postupujícím těhotenstvím tyto nepříjemné změny často nabírají na síle a může se přidat také dráždivý kašel nebo škrábání v krku. Tyto příznaky mohou být velice podobné alergii, ale ve skutečnosti většinou nejsou pro těhotnou ženu nebezpečné a nijak neohrožují ani plod. Hormonální nerovnováha by se navíc měla po porodu brzy zase ustálit. [33, 34, 35, 36, 37]

Krvácení z nosu u dětí

K častějšímu krvácení z nosu je náchylnější také dětský organismus, jelikož vývoj těla malých pacientů ještě není zcela dokončen a cévy mají tendenci se častěji lámat. Další příčinou bývají záněty a nachlazení, alergie či suchý zimní kašel. Jelikož se děti rády v nose šťourají, nebo si do něj přímo strkají různé drobné předměty, silné krvácení z nosu může způsobit také poranění nebo přítomnost cizího tělesa.

Někdy může dojít také ke krvácení z nosu ve spánku. Pokud se krev z nosu u dětí spustí v průběhu noci, malý pacient ji může spolknout a později vyzvracet nebo vyloučit v podobě tmavé stolice. Když se krvácení podaří zastavit, mělo by dítě zůstat alespoň hodinu v klidu, a ještě nějakou dobu se nosu raději nedotýkat. [38, 39, 40, 41, 42, 43]

Zdroje: cs.medlicker.com, nutriklub.cz, stefajir.cz, ftn.cz, ordinace.cz, hemofilie.cz, mojemedicina.cz, lekarna.cz, pardubice.nempk.cz, my.clevelandclinic.org, hopkinsmedicine.org, medicalnewstoday.com, nhs.uk, mayoclinic.org, betterhealth.vic.gov.au, kidshealth.org

  • Žádné názory
  • Našli jste v článku chybu?
'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
'; document.getElementById('outstream-iframe').onload = function () { setupIframe(); } replayScreen = document.getElementById('iinfoOutstreamReplay'); iinfoOutstreamPosition = document.getElementById('iinfoOutstreamPosition'); outstreamContainer = document.getElementsByClassName('outstream-container')[0]; setupReplayScreen(); } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); outstreamDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; videoContent = outstreamDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; if ( location.href.indexOf('rejstriky.finance.cz') !== -1 || location.href.indexOf('finance-rejstrik') !== -1 || location.href.indexOf('firmy.euro.cz') !== -1 || location.href.indexOf('euro-rejstrik') !== -1 || location.href.indexOf('/rejstrik/') !== -1 || location.href.indexOf('/rejstrik-firem/') !== -1) { outstreamDirectPlayed = true; soundAllowed = true; iinfoVastUrlIndex = 0; } if (!outstreamDirectPlayed) { console.log('OUTSTREAM direct'); setUpIMA(true); } else { if (soundAllowed) { const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { console.log('OUTSTREAM sound forbidden'); renderBanner(); }); } } else { renderBanner(); } } } function getWrapper() { let articleWrapper = document.querySelector('.rs-outstream-placeholder'); // Outstream Placeholder from RedSys manipulation if (articleWrapper && articleWrapper.style.display !== 'block') { articleWrapper.innerHTML = ""; articleWrapper.style.display = 'block'; } // Don't render OutStream on homepages if (articleWrapper === null) { if (document.querySelector('body.p-index')) { return null; } } if (articleWrapper === null) { articleWrapper = document.getElementById('iinfo-outstream'); } if (articleWrapper === null) { articleWrapper = document.querySelector('.layout-main__content .detail__article p:nth-of-type(6)'); } if (articleWrapper === null) { // Euro, Autobible, Zdravi articleWrapper = document.querySelector('.o-article .o-article__text p:nth-of-type(6)'); } if (articleWrapper === null) { articleWrapper = document.getElementById('sidebar'); } if (!articleWrapper) { console.error("Outstream wrapper of article was not found."); } return articleWrapper; } function setupDimensions() { outstreamWidth = Math.min(iinfoOutstreamPosition.offsetWidth, 480); outstreamHeight = Math.min(iinfoOutstreamPosition.offsetHeight, 320); } /** * Sets up IMA ad display container, ads loader, and makes an ad request. */ function setUpIMA(direct) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (direct) { adsRequest.adTagUrl = directVast; console.log('Outstream DIRECT CAMPAING advert: ' + directVast); videoContent.muted = true; videoContent.volume = 0; outstreamDirectPlayed = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = outstreamWidth; // adsRequest.linearAdSlotHeight = outstreamHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function setupReplayScreen() { replayScreen.addEventListener('click', function () { iinfoOutstreamPosition.remove(); iinfoVastUrlIndex = 0; outstreamInit(); }); } /** * Sets the 'adContainer' div as the IMA ad display container. */ function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. outstreamDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( outstreamDocument.getElementById('adContainer'), videoContent); } function unmuteAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } } /** * Loads the video content and initializes IMA ad playback. */ function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(outstreamWidth, outstreamHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } /** * Handles the ad manager loading and sets ad event listeners. * @param { !google.ima.AdsManagerLoadedEvent } adsManagerLoadedEvent */ function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } /** * Handles actions taken in response to ad events. * @param { !google.ima.AdEvent } adEvent */ function onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Outstream event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: // This is the first event sent for an ad - it is possible to // determine whether the ad is a video ad or an overlay. if (!ad.isLinear()) { // Position AdDisplayContainer correctly for overlay. // Use ad.width and ad.height. videoContent.play(); } outstreamDocument.getElementById('adContainer').style.width = '100%'; outstreamDocument.getElementById('adContainer').style.maxWidth = '640px'; outstreamDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); // This event indicates the ad has started - the video player // can adjust the UI, for example display a pause button and // remaining time. if (ad.isLinear()) { // For a linear ad, a timer can be started to poll for // the remaining time. intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstreamLastError === 303) { if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } } break; case google.ima.AdEvent.Type.COMPLETE: // This event indicates the ad has finished - the video player // can perform appropriate UI actions, such as removing the timer for // remaining time detection. if (ad.isLinear()) { clearInterval(intervalTimer); } if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } break; } } /** * Handles ad errors. * @param { !google.ima.AdErrorEvent } adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstreamLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { renderBanner(); } } function renderBanner() { if (isBanner) { console.log('Outstream: Render Banner'); iinfoOutstreamPosition.innerHTML = ""; iinfoOutstreamPosition.style.height = "330px"; iinfoOutstreamPosition.appendChild(bannerDiv); } else { console.log('Outstream: Banner is not set'); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoOutstreamPosition.remove(); outstreamInit(); } else { return false; } adVolume = 1; return true; } /** * Pauses video content and sets up ad UI. */ function onContentPauseRequested() { videoContent.pause(); // This function is where you should setup UI for showing ads (for example, // display ad timer countdown, disable seeking and more.) // setupUIForAds(); } /** * Resumes video content and removes ad UI. */ function onContentResumeRequested() { videoContent.play(); // This function is where you should ensure that your UI is ready // to play content. It is the responsibility of the Publisher to // implement this function when necessary. // setupUIForContent(); } function onActiveView() { if (outstreamContainer) { const containerOffset = outstreamContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstreamPaused) { adsManager.resume(); outstreamPaused = false; } return true; } else { if (!outstreamPaused) { adsManager.pause(); outstreamPaused = true; } } } return false; } let outstreamInitInterval; if (typeof cpexPackage !== "undefined") { outstreamInitInterval = setInterval(tryToInitializeOutstream, 100); } else { const wrapper = getWrapper(); if (wrapper) { let outstreamInitialized = false; window.addEventListener('scroll', () => { if (!outstreamInitialized) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { outstreamInit(); outstreamInitialized = true; } } }); } } function tryToInitializeOutstream() { const wrapper = getWrapper(); if (wrapper) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstreamInitInterval); outstreamInit(); } } } else { clearInterval(outstreamInitInterval); } } }
OSZAR »