Užívání statinů na cholesterol je doživotní. Snesou je vaše ledviny a játra?

2. 5. 2023

Sdílet

Autor: Depositphotos
Statiny, tedy léky snižující hladinu cholesterolu v krvi, v Česku bere více než desetina obyvatel. Jak ukázal čerstvý průzkum Zdravotní pojišťovny ministerstva vnitra, přesto o nich mnoho nevíme a jsme ochotni věřit řadě nepravdivých či zavádějících informací. Třeba že tyto léky můžeme po snížení hladiny cholesterolu vysadit, což není pravda.

Zdravotní pojišťovna ministerstva vnitra ČR (ZP MV) na konci března 2023 prezentovala výsledky průzkumu, ve kterém mimo jiné zjišťovala znalosti obyvatel ČR v souvislosti s cholesterolem a vznikem aterosklerózy, tedy poškození cévních stěn.

Co se dozvíte v článku
  1. Statiny užívá více než desetina obyvatel
  2. Statiny zná ani ne polovina dospělých
  3. Mýty o užívání léčiv na cholesterol
  4. Užívání statinů je doživotní
  5. Proč léky nelze vysadit
  6. Jaké jsou optimální hodnoty cholesterolu
  7. Poškozují statiny játra?

Statiny užívá více než desetina obyvatel

Tazatelé mimo jiné zjišťovali, jaké povědomí máme o statinech. Tedy skupině léčiv, jež ovlivňuje hladinu cholesterolu v krvi. V ČR je užívá, na pojišťovnu a většinou bez doplatku, téměř 1,3 milionu lidí.

Chcete žít déle? Zajímejte se o svůj cholesterol dřív než ve čtyřiceti nebo v padesáti Přečtěte si také:

Chcete žít déle? Zajímejte se o svůj cholesterol dřív než ve čtyřiceti nebo v padesáti

Statiny obsahují podle portálu Nzip.cz účinné látky atorvastatin, lovastatin, mevastatin nebo simvastatin. Principem jejich fungování je blokace syntézy cholesterolu v játrech. 

Užívají je pacienti, kteří mají hladinu cholesterolu vysokou, což má za následek pozvolné poškozování cévních stěn, které může vést k jejich uzávěře, a tedy i nedokrvení mozku či srdečního svalu, což jsou příčiny infarktu nebo mrtvice. Tzv. ateroskleróza ale může mít mnoho dalších, závažných projevů.

Statiny zná ani ne polovina dospělých

Průzkum ukázal, že o existenci statinů někdy slyšelo 43 % dotázaných. Znají je spíše ženy (48 %) než muži (37 %). Podíl znalostí o statinech souvisí také s věkem, kdy mezi třicátníky je pouze čtvrtinová, zatímco mezi sedmdesátníky ví o jejich existenci dvě třetiny dotázaných.

Výsledky průzkumu ukazují, že nadpoloviční většina lidí nemá povědomí o statinech.

Autor: ZP MV ČR

Vysvětlením je nejspíše to, že ženy se o své zdraví zajímají aktivněji a mladší ročníky se se statiny tolik nesetkávají či to berou tak, že vysoký cholesterol je záležitost starších. To je ale zavádějící, protože vysokou hladinu tuku v krvi mohou mít i mladí lidé, navíc je žádoucí, aby o hodnotách cholesterolu věděli už i čerstvě dospělí.

Mýty o užívání léčiv na cholesterol

Většina respondentů správně uvedla, že přínosy užívání těchto léků převažují nad riziky nežádoucích účinků. Ostatně to je princip, který musí fungovat, aby se lék dostal vůbec na trh a udržel se na něm. 

Existuje i poměrně velký podíl lidí, kteří se statinů obávají a inklinují k mýtům. „Statiny jsou obestřeny negativními zprávami, z nichž polovina z nich, např. typu, že rozpouští svaly, způsobují demenci či impotenci, je úplně smyšlených,“ uvádí předseda České společnosti pro aterosklerózu Michal Vrablík, jenž je garantem průzkumu ZP MV.

Mnozí jsou přesvědčeni o tom, že vyšší cholesterol škodí méně než užívání statinů (17 %), že dlouhodobé užívání statinů poškozuje játra a ledviny (33 %), že léčba statiny je nežádoucí v případě diabetiků (12 %) a že nízká hladina cholesterolu zvyšuje riziko rakoviny (9 %). Kromě toho si 36 % lidí myslí, že užívání statinů je dočasné a po snížení hladiny cholesterolu je lze vysadit. „Nic z toho není pravda,“ podotýká Michal Vrablík.

Více než třetina lidí si mylně myslí, že statiny lze po snížení hladiny cholesterolu vysadit.

Autor: ZP MV ČR

Užívání statinů je doživotní

Jedním z výroků, který měl nejvyšší počet špatných odpovědí, byl ten, že statiny lze po snížení hladiny cholesterolu vysadit. Tedy že jejich užívání je dočasné. Podle Michala Vrablíka tomu tak ale není. „Užívání statinů je v podstatě doživotní, a to i v případě, že hodnoty cholesterolu se dle laboratorních výsledků dostanou pod optimální hladinu,“ upozorňuje odborník.

Připouští, že může nastat situace, kdy by lékař statiny vysadil. „Třeba v 85 letech můžeme pacientovi říci, že díky celoživotní léčbě jsme u něj dokázali zabránit rozvoji cévních změn. A že teď má před sebou dalších 15 let života, kdy už ji nepotřebuje,“ uvádí v nadsázce Michal Vrablík. „Příklad s vysazením statinů v 85 letech je samozřejmě extrémní a my lékaři takto nepostupujeme, protože i přes léčbu se změny na stěnách cév rozvíjejí, ale s léčbou to jde podstatně pomaleji,“ dodává internista. 

Lékaři připravují plošné testování novorozenců kvůli dědičnému vysokému cholesterolu Přečtěte si také:

Lékaři připravují plošné testování novorozenců kvůli dědičnému vysokému cholesterolu

Proč léky nelze vysadit

Proč léky není radno vysazovat? Protože jejich prvotním cílem není snížit hladinu cholesterolu, ale ochránit srdce a cévy. „Statiny slouží k prevenci. Bereme je proto, abychom neměli infarkt a mrtvici, nikoliv abychom primárně zlepšili cholesterol, tedy měli z laboratoře skvělé biochemické parametry. Konečným cílem snažení nás lékařů tedy není pokles cholesterolu, ale zlepšení cévního a srdečního zdraví,“ říká Michal Vrablík.

Jaké jsou optimální hodnoty cholesterolu

O hladinu svého cholesterolu bychom se měli zajímat už v 18 letech, kdy nám ji poprvé nechá vyšetřit praktický lékař v rámci preventivní prohlídky. Je proč, protože vyšší hodnoty cholesterolu, než jsou ty optimální, má více než 80 procent populace. Řada lidí o tom ale neví, protože tento stav nebolí a desítky let se nemusí nijak projevovat.

Co se týká optimální hladiny cholesterolu, jedna jediná neexistuje, protože hranice se stanovují dle míry rizika.

  • Pokud má člověk velmi vysoké riziko kardiovaskulárních nemocí (např. pacient po infarktu či mrtvici), činí optimální hranice do 1,4 mmol/l.
  • Pokud má člověk vysoké riziko, činí optimální hladina LDL cholesterolu do 1,8 mmol/l.
  • Lidé se středním rizikem onemocnění oběhové soustavy mají optimální hladinu do 2,6 mmol/l.
  • Lidé s nízkým rizikem kardiovaskulárního onemocnění mají optimální hladinu do 3 mmol/l.

Statiny kromě snížení hladiny cholesterolu stabilizují výstelku cév, zlepšují funkci cévní stěny a mají protizánětlivé a protisrážlivé účinky. „To jsou všechno vlastnosti, které chrání cévní systém a v konečném důsledku na něj působí preventivně,“ podotýká Michal Vrablík.

Ochrana cév přitom musí být dlouhodobá, aby se změny na jejich stěnách podařilo zpomalovat. Ateroskleróza totiž potřebuje často desítky let, než se projeví infarktem či mrtvicí. Pokud pacient lék přestane užívat, jeho efekt velmi rychle odeznívá. „Vytratí se do čtyř dnů,“ upozorňuje přední odborník na preventivní kardiologii.

Poškozují statiny játra?

Mezi časté obavy pacientů, a průzkum ZP MV to potvrdil, patří to, že dlouhodobé užívání statinů poškozuje játra a ledviny. Domnívá se to 33 % dotázaných. 54 % neví, zda to je, či není pravda.

Ostatně v příbalových letácích najdou pacienti varování, že statiny nemají užívat, pokud mají nemocná játra či je doporučeno výrobcem provést před začátkem užívání léku krevní test kontrolující jaterní funkce. Mezi nežádoucími účinky pak výrobci uvádí ve velmi vzácných případech selhání jater. V letácích se píše i to, že existuje riziko rozpadu svalů, které je zvýšené mimo jiné u lidí s onemocněním ledvin.

Jak předejít problémům s ledvinami? Poslechněte si podcast s nefroložkou:

Lékař tyto obavy rozptyluje. „To, že by dlouhodobé užívání statinů poškozovalo játra a ledviny, není jednoznačně pravda. Jde o obraz internetem podporované mlhy, tedy mýtů a polopravd,“ upozorňuje Michal Vrablík.

„Z mnoha pozorování, a to i v klinických studiích, které slouží k prokázání účinku a bezpečností léků, se ví, že výskyt závažných jaterních či ledvinných komplikací uživatelů statinů je stejný jako v běžné populaci. To znamená, že dnes již víme, že užívání léků vede k poškození těchto orgánů tak raritně, jak raritní tato problematika je v běžné populaci. Statiny jsou tedy z hlediska funkce jater a ledvin bezpečné,“ podotýká Michal Vrablík.

Galerie: Vrozený vysoký cholesterol je nebezpečný

Proč tedy před zahájením léčby dělat testy? Podle lékaře z Všeobecné fakultní nemocnice proto, aby se odhalila případná skrytá onemocnění jater, což by mělo vliv na rozhodování lékaře, jakým způsobem zahájit léčbu. „Během léčby se už ale jaterní funkce monitorovat nemají, protože z toho hlediska je léčba statiny bezpečná,“ vysvětluje odborník.

Příbalový leták pak podle něj rizika zmiňuje proto, že jeho úkolem je informovat o jakýchkoliv výskytech komplikací při léčbě. „Výrobce má povinnost zaznamenat všechny okolnosti, které se vyskytly při testování před uvedením výrobku na trh i při jeho užívání. To ale neznamená, že je to relevantní riziko pro každého uživatele. Leták shrnuje úplně všechna rizika, která se většiny pacientů vůbec netýkají,“ uklidňuje Michal Vrablík. „Leták není konstruován tak, aby pacienta informoval o důležitých rizicích pro něj. Od toho je lékař,“ zdůrazňuje.

Stejně tak by pacienti podle něj neměli statiny ignorovat kvůli možnému výskytu nežádoucího účinku v podobě svalové ochablosti. „Ano, statiny mají svalové nežádoucí účinky, ale je to u maximálně 10 % uživatelů a většina z nich je plně reverzibilních, tedy vratných, a pacienti jimi nemusí trpět,“ dodává.

Kuřáci, kterým je dnes 30 až 50 let, pocítí následky kouření za pět až deset let Přečtěte si také:

Kuřáci, kterým je dnes 30 až 50 let, pocítí následky kouření za pět až deset let

Mýty se přitom podílí přinejmenším na jednom zásadním faktu. Pacienti, kterým lékař statiny předepíše, je často neberou podle instrukcí, ale dle vlastního uvážení.

„Existují odborné práce, které hovoří o tom, že až 50 % lidí do dvou let od nasazení léčiv je užívalo nepravidelně, nebo vůbec. Týká se to všech léčiv obecně a statiny jsou v tomto na čelních místech. Jejich účinnost je pak jiná, snížená, nebo žádná,“ podotýká Michal Vrablík.

Průzkumu pro Zdravotní pojišťovnu ministerstva vnitra ČR (ZP MV) se účastnilo 1034 respondentů, kteří představují reprezentativní vzorek dospělé populace ČR (tj. výběr dotazovaných odpovídá procentuálnímu zastoupení v celkové populaci, a to jak dle pohlaví, vzdělanosti, tak v tom, z jak početného města či vesnice dotazovaní pocházeli). Dotazování proběhlo ve dnech 16. až 25. listopadu 2022.

Odborná spolupráce:

prof. MUDr. Michal Vrablík, Ph.D.

Předseda České společnosti pro aterosklerózu a České asociace preventivní kardiologie. Jeden z odborných garantů projektu novorozeneckého screeningu zaměřeného na časný záchyt familiární hypercholesterolémie a spoluautor Národního kardiovaskulárního plánu. Působí na III. interní klinice – klinika endokrinologie a metabolismu 1. lékařské fakulty Univerzity Karlovy a ve Všeobecné fakultní nemocnici v Praze.

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 »