Zákon o ochraně spotřebitele - Přestupky

Předpis č. 634/1992 Sb.

Znění od 13. 12. 2024

634/1992 Sb. Zákon o ochraně spotřebitele

Přestupky

§ 24

(1) Výrobce, dovozce, vývozce, dodavatel, prodávající nebo jiný podnikatel se dopustí přestupku tím, že

a) poruší zákaz používání nekalých obchodních praktik,

b) poruší zákaz vyplývající z přímo použitelného předpisu Evropských společenství, kterým se zakazuje uvádět na trh, dovážet do Společenství a vyvážet z něj kočičí a psí kůže a výrobky obsahující tyto kůže29),

c) vyrábí, dováží, uvádí na trh, nabízí nebo prodává textilní výrobky neoznačené podle přímo použitelného předpisu Evropské unie upravujícího názvy textilních vláken a související označování materiálového složení textilních výrobků31), nebo textilní výrobky, k nimž není připojena obchodní dokumentace podle tohoto přímo použitelného předpisu Evropské unie33), nebo

d) použije neoprávněně ekoznačku.

(2) Výrobce nebo podnikatel jako osoba odpovědná za první uvedení obuvi na trh Evropského společenství se dopustí přestupku tím, že v rozporu s § 10a odst. 2 neoznačí materiály použité v hlavních částech obuvi nebo tyto údaje neposkytne dodavateli, či prodávajícímu.

(3) Výrobce, dovozce nebo prodávající se dopustí přestupku tím, že v rozporu s § 18a používá názvy jednotlivých druhů křišťálového skla a jim přiřazené symboly nebo nedoplní firemní nebo výrobní označení či značku nebo obchodní firmu nebo název obsahující označení "křišťál", "křišťálové", "crystal" nebo odvozeniny upřesňujícími údaji.

(4) Dodavatel, prodávající nebo vývozce se dopustí přestupku tím, že nabízí, prodává nebo vyváží výrobky, které byly určeny pro humanitární účely a označeny nápisem "humanita" podle zvláštního právního předpisu7).

(5) Prodávající se dopustí přestupku tím, že

a) nesplní povinnost poctivého prodeje výrobků nebo poskytování služeb podle § 3,

b) v rozporu s § 3a používá telefonní číslo s vyšší než běžnou cenou,

c) při prodeji výrobků nebo poskytování služeb poruší zákaz diskriminace spotřebitele podle § 6,

d) poruší zákaz užívání zneužívajících ujednání podle § 7,

e) poruší zákaz nabízet za účelem prodeje, prodávat a skladovat výrobky porušující práva duševního vlastnictví nebo neoprávněné užívání označení podle zvláštního právního předpisu4b),

f) nesplní informační povinnost podle § 9,

g) nezajistí, aby jím prodávané výrobky byly označeny podle § 10a odst. 1,

h) v rozporu s § 10 neupozorní při prodeji použitých nebo upravovaných výrobků, výrobků s vadou nebo výrobků, jejichž užitné vlastnosti jsou jinak omezeny, spotřebitele předem na tyto skutečnosti nebo takové výrobky prodává společně s ostatními výrobky anebo v provozovně, v místě vyhrazeném k prodeji takových výrobků, umístí předměty, které neslouží k prodeji,

i) poskytuje informace v rozporu s § 11,

j) neinformuje spotřebitele podle § 11a,

k) informaci o ceně nebo slevě z ceny poskytuje spotřebiteli v rozporu s § 12 nebo 12a, nebo neposkytne spotřebiteli informace v souladu s čl. 23 nařízení Evropského parlamentu a Rady (ES) č. 1008/2008,

l) neinformuje spotřebitele podle § 13,

m) neposkytne spotřebiteli některou z informací podle § 14 nebo čl. 14 nařízení Evropského parlamentu a Rady (EU) č. 524/2013,

n) nepředvede spotřebiteli výrobek podle § 15 odst. 1,

o) nevydá spotřebiteli potvrzení podle § 15 odst. 2,

p) nevydá spotřebiteli písemné potvrzení o převzetí objednávky podle § 15 odst. 3,

q) nevydá spotřebiteli na jeho žádost řádně vyplněný doklad o zakoupení výrobku nebo o poskytnutí služby s údaji stanovenými v § 16 odst. 1,

r) nevyznačí v dokladu o zakoupení výrobku v případě prodeje s následnou dodávkou místo určení a datum dodávky podle § 16 odst. 2,

s) nevyznačí při prodeji použitých nebo upravovaných výrobků, výrobků s vadou nebo výrobků, jejichž užitné vlastnosti jsou jinak omezeny, tyto skutečnosti v dokladu o zakoupení výrobku podle § 16 odst. 3,

t) nesplní povinnost prodeje výrobku v hygienicky nezávadném obalu podle § 17,

u) neinformuje spotřebitele o peněžní částce za výkup vratných zálohovaných obalů podle § 18 odst. 1, nebo v rozporu s § 18 odst. 2 neinformuje spotřebitele o změně peněžní částky za výkup vratných zálohovaných obalů anebo o ukončení výkupu vratných zálohovaných obalů anebo výkup vratných zálohovaných obalů zastaví,

v) v rozporu s § 19 odst. 1 nezajistí, aby v provozovně byl po celou provozní dobu přítomen pracovník pověřený vyřizováním reklamace,

w) v rozporu s § 19 odst. 1 nepřijme reklamaci,

x) v rozporu s § 19 odst. 2 a 5 nevydá spotřebiteli písemné potvrzení o reklamaci se stanovenými údaji, nebo

y) nesplní některou z povinností podle § 20s.

(6) Prodávající se dopustí přestupku tím, že

a) poruší některou z povinností nebo poruší některý ze zákazů podle čl. 3, 4 nebo 5 přímo použitelného předpisu Evropské unie upravujícího neoprávněné zeměpisné blokování49), nebo

b) nezpřístupní informace podle čl. 7 nařízení Evropského parlamentu a Rady (EU) 2018/644.

(7) Prodávající uvedený v § 20 odst. 1 se dopustí přestupku tím, že

a) neoznámí údaje České obchodní inspekci podle § 20 odst. 1,

b) neučiní oznámení České obchodní inspekci ve lhůtě podle § 20 odst. 3, nebo

c) v oznámení České obchodní inspekci podle § 20 odst. 1 uvede nepravdivé nebo neúplné údaje.

(8) Prodávající uvedený v § 20 odst. 1 nebo právnická osoba nebo podnikající fyzická osoba uvedená v § 20a odst. 2 se dopustí přestupku tím, že v pozvání k účasti na organizované akci neuvede údaje podle § 20a odst. 1, nebo je uvede nepravdivě nebo neúplně.

(9) Prodávající uvedený v § 20b odst. 1 se dopustí přestupku tím, že během organizované akce nebo před uplynutím lhůty sedmi dnů od uzavření smlouvy od spotřebitele požaduje nebo od něj přijme plnění odpovídající kupní ceně nabízeného výrobku nebo služby anebo její části, či zálohu na uhrazení ceny nebo jakýkoli jiný poplatek.

(10) Prodávající jako osoba, která v souvislosti s nabízením nebo uzavíráním smlouvy, ve které se za úplatu sjednává dočasné užívání ubytovacího zařízení a jiné rekreační služby podle § 1852 občanského zákoníku, se dopustí přestupku tím, že

a) neposkytne spotřebiteli údaje podle § 1854 odst. 2 občanského zákoníku v rozsahu a způsobem tam uvedeným,

b) neuvede zřetelně na pozvánce k nabídkové nebo prodejní akci účel a povahu této akce a nezajistí, aby byly po celou dobu jejího trvání spotřebiteli k dispozici údaje podle § 1854 odst. 2 občanského zákoníku,

c) neupozorní výslovně spotřebitele s dostatečným předstihem před uzavřením smlouvy, nebo než je spotřebitel vázán svým návrhem na uzavření smlouvy, na jeho právo odstoupit od smlouvy, nebo na délku lhůty k odstoupení a na zákaz platby záloh a jiných plnění nebo jejich zajištění v průběhu lhůty pro odstoupení,

d) nesdělí spotřebiteli údaje podle § 1854 odst. 2 v jazyce požadovaném podle § 1854 odst. 3 občanského zákoníku nebo neuzavře se spotřebitelem smlouvu v jazyce požadovaném v § 1860 občanského zákoníku nebo nevydá spotřebiteli úřední překlad textu smlouvy do jazyka uvedeného v § 1860 občanského zákoníku,

e) neuvede ve smlouvě údaje podle § 1856 odst. 1 občanského zákoníku,

f) neposkytne spotřebiteli řádně vyplněný formulář pro odstoupení od smlouvy,

g) neposkytne spotřebiteli písemně údaje podle § 1854 odst. 2 nebo písemně neupozorní na jejich změny,

h) nezajistí, aby spotřebitel podepsal zvlášť každé ujednání o právu na odstoupení od smlouvy, o lhůtě k odstoupení a o zákazu platby záloh a jiných plnění nebo jejich zajištění v průběhu lhůty pro odstoupení,

i) nevydá spotřebiteli bezprostředně po uzavření smlouvy alespoň jedno její vyhotovení,

j) nerozdělí u smlouvy, kterou se nabývá za úplatu právo na výhodu spojenou s ubytováním, popřípadě s dopravou nebo jinými službami, platby do ročních splátek v téže výši, popřípadě se zohledněním vývoje cen, je-li to sjednáno, nebo nezašle spotřebiteli výzvu k provedení platby písemně nejpozději 14 dnů přede dnem splatnosti,

k) v rozporu s § 1864 občanského zákoníku požaduje nebo přijímá od spotřebitele zálohu či jiné plnění nebo jejich zajištění, nebo

l) uvádí na trh nebo prodává užívání ubytovacího zařízení s noclehem na více než 1 časový úsek nebo výhodu spojenou s ubytováním popřípadě včetně dopravy nebo jiných služeb jako investici.

(11) Provozovatel tržiště (tržnice) se dopustí přestupku tím, že v rozporu s § 14a nevede nebo nepředloží evidenci prodávajících.

(12) Přestupku se dopustí ten, kdo neposkytne příslušnému orgánu údaje nebo dokumenty požadované podle § 24g.

(13) Právnická nebo podnikající fyzická osoba se dopustí přestupku tím, že nesplní povinnost uloženou rozhodnutím vydaným podle § 24h nebo 24i odst. 1.

(14) Poskytovatel služby informační společnosti se dopustí přestupku tím, že nesplní povinnost uloženou rozhodnutím podle § 24i odst. 2.

(15) Prodávající se dopustí přestupku tím, že

a) nesdělí spotřebiteli některý z údajů podle § 1811 občanského zákoníku,

b) v rozporu s § 1817 občanského zákoníku požaduje po spotřebiteli další platbu, než kterou je spotřebitel povinen uhradit na základě hlavního smluvního závazku,

c) v rozporu s § 1817 občanského zákoníku odvozuje výslovný souhlas spotřebitele s další platbou z předem nastavených možností, které musí spotřebitel zamítnout, aby se této další platbě vyhnul,

d) nesdělí spotřebiteli některý z údajů podle § 1820 odst. 1 občanského zákoníku,

e) při sjednávání smlouvy prostřednictvím komunikace na dálku nesdělí nebo nezpřístupní spotřebiteli některý z údajů podle § 1824 občanského zákoníku,

f) nevydá spotřebiteli potvrzení o uzavřené smlouvě podle § 1824a občanského zákoníku,

g) v rozporu s § 1825 odst. 1 občanského zákoníku nesdělí spotřebiteli na začátku telefonního hovoru svou totožnost, případně totožnost jiné osoby, v jejímž zastoupení jedná, a obchodní účel hovoru,

h) při uzavírání smlouvy elektronickými prostředky neuvede některý z údajů podle § 1826 odst. 1 občanského zákoníku,

i) v rozporu s § 1826 odst. 2 občanského zákoníku neumožní spotřebiteli před podáním objednávky zkontrolovat a měnit vstupní údaje, které do objednávky vložil,

j) v rozporu s § 1826a odst. 1 občanského zákoníku neupozorní spotřebitele bezprostředně před tím, než spotřebitel učiní objednávku, jasným a výrazným způsobem na některý z údajů v § 1820 odst. 1 písm. a), e), o) a p) občanského zákoníku,

k) v rozporu s § 1826a odst. 2 občanského zákoníku nezajistí, aby tlačítko nebo jiný ovládací prvek užitý k učinění objednávky byly označeny snadno čitelným nápisem „objednávka zavazující k platbě“ nebo jinou odpovídající jednoznačnou formulací,

l) v rozporu s § 1827 odst. 1 občanského zákoníku nepotvrdí přijetí objednávky podané prostřednictvím některého prostředku komunikace na dálku,

m) v rozporu s § 1827 odst. 2 občanského zákoníku neposkytne spotřebiteli v textové podobě znění všeobecných obchodních podmínek,

n) při sjednávání smlouvy mimo prostor obvyklý pro podnikatelovo podnikání za současné fyzické přítomnosti podnikatele a spotřebitele neposkytne spotřebiteli některý z údajů podle § 1828 odst. 1 občanského zákoníku,

o) v rozporu s § 1828 odst. 3 občanského zákoníku neposkytne spotřebiteli vyhotovení podepsané smlouvy nebo potvrzení o uzavření smlouvy,

p) v rozporu s § 1830 odst. 2 občanského zákoníku nepotvrdí spotřebiteli přijetí odstoupení od smlouvy podaného prostřednictvím vzorového formuláře pro odstoupení od smlouvy na internetových stránkách,

q) neodevzdá věc spotřebiteli v ujednaném čase, nebo ve lhůtě podle § 2159 odst. 1 občanského zákoníku.

(16) Poskytovatel on-line tržiště se dopustí přestupku tím, že neposkytne spotřebiteli některou z informací podle § 11b.

(17) Právnická nebo podnikající fyzická osoba se dopustí přestupku tím, že nesplní povinnost uloženou rozhodnutím vydaným na základě § 23f odst. 6.

(18) Poskytovatel služby informační společnosti se dopustí přestupku tím, že nesplní povinnost uloženou rozhodnutím vydaným na základě § 23f odst. 7.

(19) Za přestupek lze uložit pokutu do

a) 500000 Kč, jde-li o přestupek podle odstavce 12, 17 nebo 18,

b) 1000000 Kč, jde-li o přestupek podle odstavce 5 písm. b), m) až s), u), v) nebo y) nebo odstavce 6 písm. b),

c) 2000000 Kč, jde-li o přestupek podle odstavce 9 nebo 10,

d) 3000000 Kč, jde-li o přestupek podle odstavce 1 písm. b) až d), odstavce 2 nebo 3, odstavce 5 písm. c), g) až j), l), t), w) nebo x) nebo odstavce 6 písm. a), nebo

e) 5000000 Kč, jde-li o přestupek podle odstavce 1 písm. a), odstavce 4, odstavce 5 písm. a), d) až f) nebo k) nebo odstavce 7, 8, 11, 13 až 15 nebo 16.

(20) Je-li ukládána pokuta za přestupek podle odstavce 1 písm. a) odstavce 5 písm. b), d) nebo j) nebo odstavce 15 v souvislosti s uplatňováním čl. 21 nařízení Evropského parlamentu a Rady (EU) 2017/2394, lze uložit pokutu do výše 4 % celkového ročního obratu prodávajícího. Není-li informace o ročním obratu prodávajícího dostupná, lze uložit pokutu do 50000000 Kč.

§ 24a

(1) Fyzická osoba, která prodává spotřebiteli rostlinné a živočišné výrobky z vlastní drobné pěstitelské nebo chovatelské činnosti anebo lesní plodiny, se dopustí přestupku tím, že

a) nesplní povinnost poctivého prodeje výrobků nebo poskytování služeb podle § 3,

b) při prodeji výrobků nebo poskytování služeb poruší zákaz diskriminace spotřebitele podle § 6,

c) poruší zákaz vyplývající z přímo použitelného předpisu Evropských společenství, kterým se zakazuje uvádět na trh, dovážet do Společenství a vyvážet z něj kočičí a psí kůže a výrobky obsahující tyto kůže29),

d) poskytuje informaci o ceně v rozporu s § 12,

e) nevydá spotřebiteli na jeho žádost řádně vyplněný doklad o zakoupení výrobku nebo o poskytnutí služby s údaji stanovenými v § 16 odst. 1, nebo

f) použije neoprávněně ekoznačku.

(2) Za přestupek podle odstavce 1 lze uložit pokutu do 100 000 Kč.

Společná ustanovení k přestupkům

§ 24b

(1) Přestupky podle tohoto zákona projedná správní orgán, který podle § 23, 23a, 23b, 23c nebo 23d vykonává dozor nad dodržováním povinnosti, jejímž porušením došlo ke spáchání přestupku. Je-li k projednání přestupku příslušných více správních orgánů, přestupek projedná ten z nich, který nejdříve zahájil správní řízení, a nebylo-li správní řízení zahájeno, tak ten, který porušení povinnosti zjistil jako první. O zjištěném porušení povinnosti správní orgán bezodkladně informuje správní orgán, který vykonává dozor nad dodržováním povinnosti z jiného hlediska nebo v rámci své působnosti v jiné oblasti.

(2) Pokuty vybírá správní orgán, který je uložil, s výjimkou České národní banky.

(3) Pokuty uložené Českým telekomunikačním úřadem vymáhá Český telekomunikační úřad.

(4) Přestupky podle § 24 odst. 12 až 14 projedná správní orgán příslušný podle § 24d odst. 2.

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 »