Za jakých podmínek si mohou žáci a studenti přivydělat na letních brigádách?

20. 6. 2023
Doba čtení: 5 minut

Sdílet

Autor: Depositphotos
Období letních školních prázdnin je příležitostí pro sezonní zaměstnance. Přivydělat si mohou i žáci a studenti. Od kdy a za jakých podmínek? A mohou mladiství samostatně podnikat?

Období letních prázdnin bývá pro studenty i některé žáky příležitost, jak si vydělat něco navíc ke kapesnému. Za jakých podmínek mohou na letní brigádu?

Na letní brigádu mohou i deváťáci a gymnazisté z kvarty

Závislá práce nezletilých mladších než patnáct let nebo nezletilých, kteří neukončili povinnou školní docházku, je zakázána. Děti mohou vykonávat jen uměleckou, kulturní, reklamní nebo sportovní činnost s povolením Úřadu práce.

Zavázat se k výkonu závislé práce podle zákoníku práce může nezletilý, který dovršil patnáct let. Jako den nástupu do práce nesmí být sjednán den, který by předcházel dni, kdy nezletilý ukončí povinnou školní docházku. Tato pravidla určuje občanský zákoník ve spojení se zákonem o zaměstnanosti a zákoníkem práce.

Smlouvy od 15 let, nástup do práce až po skončení školní docházky

Vydělávat si v zaměstnání je tak možné již od patnácti let, ale je třeba mít dokončenu povinnou školní docházku. Ukončení povinné školní docházky je pouze podmínkou nástupu do práce, nikoliv možnosti uzavřít pracovní smlouvu nebo dohodu o práci konané mimo pracovní poměr. Patnáctiletý žák nebo student si tak může sjednat pracovní smlouvu nebo dohodu o provedení práce či dohodu o pracovní činnosti, a to ihned, jakmile dovrší 15. rok věku. Nástup do práce však musí být dohodnut na později, až na dobu po ukončení školní docházky.

Mladiství, kteří již mají 15 let, si tak mohou shánět práci v předstihu a uzavírat smlouvy a dohody s odloženým nástupem do práce na dobu, když už budou mít dokončenu povinnou školní docházku.

Prázdninové brigády: Jak je to s daní a odvodem pojistného? Přečtěte si také:

Prázdninové brigády: Jak je to s daní a odvodem pojistného?

Kdy je ukončena povinná školní docházka?

Podle školského zákona platí, že školní docházka je povinná po dobu devíti školních roků, nejvýše však do konce školního roku, v němž žák dosáhne sedmnáctého roku věku.

Školní rok začíná 1. září a končí 31. srpna následujícího kalendářního roku, přičemž se člení na období školního vyučování a období školních prázdnin. Žák splní povinnou školní docházku uplynutím období školního vyučování ve školním roce, v němž dokončí poslední rok povinné školní docházky.

Pracovněprávní vztahy tak lze sjednávat s dnem nástupu do práce již v období letních (tzv. hlavních) školních prázdnin následujících po období školního vyučování ve školním roce, v němž žák dovrší poslední rok povinné školní docházky.

Jak je to letos?

Vyučování ve druhém pololetí školního roku 2022–2023 bude ukončeno v pátek 30. června 2023 (viz Organizace školního roku 2022/2023 v ZŠ, SŠ, ZUŠ a konzervatořích na webu Ministerstva školství – MŠMT).

Hlavní, tzv. letní prázdniny tak budou od soboty 1. července 2023 do soboty 3. září 2023. Nový školní rok 2023–2024 tedy v pátek 1. září 2023 ještě zahájen neubude. Vyučování ve školním roce 2023–2024 začne až v pondělí 4. září 2023.

Kdo tedy dovršil 15. rok věku a obdobím školního vyučování v letošním školním roce 2022–2023 ukončí povinnou školní docházku, může od 1. 7. 2023 pracovat. Takže od prvního prázdninového, resp. hned prvního červencového víkendu roku 2023.

Na jaké hrazené preventivky má nárok vaše dítě? Přečtěte si také:

Na jaké hrazené preventivky má nárok vaše dítě?

Jak je to, když konec června připadne na víkend

Když v nějakém roce připadne konec června na víkendové dny, třeba 29. 6. je v sobotu a 30. 6. je v neděli (a MŠMT ukončí období školního vyučování již v pátek 28. června a prázdniny zahájí 29. června), mohou patnáctiletí, kteří dovršili povinnou školní docházku obdobím školního vyučování 28. června, nastoupit do práce již 29. června.

Kdyby připadl konec června (30. 6.) na pondělí a ministerstvo ukončilo období školního vyučování již v pátek 27. 6., mohou patnáctiletí, kterým skončí povinná školní docházka právě 27. 6., nastoupit na brigádu již v sobotu 28. 6.

Komu není 15 let, nemůže do práce

Letošní absolventi základních škol nebo studenti víceletého gymnázia, kteří dokončili kvartu, tak mohou nastoupit letní prázdninovou brigádu od soboty 1. července 2023.

Jestliže dosáhli věku 15 let, nemusejí čekat na sjednání příslušné smlouvy až do 1. 7. 2023 (tj. začátku letních prázdnin a zároveň prvního pracovního dne o prázdninách), nýbrž si mohou pracovněprávní vztah sjednat a zajistit dopředu uzavřením smlouvy již nyní.

Pracovněprávní vztah však nesmí předem, ale ani kupř. v červenci sjednat žák či student, který sice případně má už ukončenu povinnou školní docházku, ale patnácti let dosáhne až v měsíci srpnu. (Ovšem než aby měl někdo takto brzy ukončenu povinnou školní docházku, aniž by mu už bylo 15 let, jsou v praxi časté případy, že někomu už je 15 let, ale nemá a nebude mít ukončenu povinnou školní docházku. Povinná školní docházka začíná počátkem školního roku, který následuje po dni, kdy dítě dosáhne šestého roku věku, pokud mu není povolen odklad. Pak pracovat v závislé činnosti nemůže.)

Není tedy pravda, že ten, kdo již oslavil 15. narozeniny, získává automaticky statut mladistvého pracovníka (a může tak nastoupit do zaměstnání). Ten získá až dosažením patnáctého roku věku ve spojení s ukončením povinné docházky.

Vyplatí se dobrovolné důchodové pojištění, nebo raději investovat? Co pomůže mladým k lepšímu důchodu? Přečtěte si také:

Vyplatí se dobrovolné důchodové pojištění, nebo raději investovat? Co pomůže mladým k lepšímu důchodu?

Mladistvé chrání různá omezení

Zákoník práce pro mladistvé a jejich zaměstnavatele stanoví některá omezení.
Dohodu o odpovědnosti k ochraně hodnot svěřených zaměstnanci k vyúčtování (tzv. hmotnou odpovědnost) nebo dohodu o odpovědnosti za ztrátu svěřených předmětů lze uzavřít nejdříve v den, kdy zaměstnanec dosáhne 18 let věku.

Zaměstnavatelé smějí zaměstnávat mladistvé zaměstnance (tj. mladší 18 let) pouze pracemi, které jsou přiměřené jejich fyzickému a rozumovému rozvoji, a poskytovat jim při práci zvýšenou péči.

U zaměstnance mladšího než 18 let nesmí délka směny v jednotlivých dnech překročit 8 hodin a ve více pracovněprávních vztazích nesmí délka týdenní pracovní doby ve svém souhrnu překročit 40 hodin týdně. Pracovní dobu mladistvých je přitom třeba sčítat, pokud jsou event. zaměstnáni ve více pracovněprávních vztazích současně. S mladistvými zaměstnanci nelze dohodnout ani jim nařídit práci přesčas (rovněž ne práci v noci).

Nejspíš na dohodu o provedení práce

Drtivá většina žáků a studentů bude vykonávat brigádnickou činnost nejspíš na základě dohody o provedení práce.

Dohoda o provedení práce: vhodná smlouva nejen pro studentské brigády Přečtěte si také:

Dohoda o provedení práce: vhodná smlouva nejen pro studentské brigády

A co když chce nezletilý podnikat?

Někteří mladí lidé jsou tak schopní a vyspělí, že se nechtějí omezovat jen na závislou práci v zaměstnání nebo si přivydělávat jenom o prázdninách, ale chtějí pracovat samostatně – podnikat, a to dlouhodobě, resp. trvale. To už je složitější, ale není to nemožné.

bitcoin_smenarna

Pokud by chtěl nezletilý podnikat, má především následující možnosti:

  • Podnikat samostatně na základě přivolení soudu k souhlasu zákonného zástupce se samostatným provozováním obchodního závodu nebo jinou obdobnou výdělečnou činností (dle § 33 občanského zákoníku).
  • Podnikat samostatně na základě přiznání svéprávnosti soudem (dle § 37 občanského zákoníku). Jde o tzv. zplnoletnění. Avšak je přístupné jen pro mladistvé od 16 let. Mladý člověk musí soudu osvědčit svou schopnost sám se živit a obstarat si své záležitosti, tedy předložit podnikatelský plán. S návrhem na zplnoletnění ovšem musí souhlasit zákonný zástupce nezletilého. 

Samozřejmě se pak mohou nezletilí účastnit na podnikání rodinného závodu nebo svého rodiče jako spolupracující osoby.

Autor článku

Nenadávejte právníkům, zákony netvoří zdaleka jen oni. Oni je pak jen zašmodrchávají ve prospěch svých klientů, třeba zrovna vás. Budu se však snažit vám je vysvětlovat.

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