Při zápisu by škola v dítěti měla vzbudit radost, ne jej zkoušet, říká psycholog

14. 4. 2023

Sdílet

Autor: Vitalia.cz/Karel Choc
Dítě sice u zápisu můžeme vyzkoušet, ale nic moc nám to o něm neřekne. Zejména když se v tu chvíli budoucí prvňáček neprojeví. Proč, to vysvětluje v rozhovoru pro Vitalia.cz dětský psycholog Václav Mertin.

V dubnu a květnu probíhají tradiční zápisy do prvních tříd a s nimi vrcholí u některých rodičů také nejistota vyvolaná základní otázkou: Je naše dítě na změnu připravené, nebo ne?

S rodiči je už několik desítek let řeší dětský psycholog Václav Mertin. Jezdí jim přednášet, píše pro ně i učitele knihy, věnuje se jim i dětem v poradně. V rozhovoru pro Vitalia.cz vysvětluje, proč by nedoporučoval vstup do školy pětiletým dětem a proč je dobré ze zápisu do školy nevyvozovat vážné závěry na téma, co dítě zvládne a co ne. 

Hledání jasné odpovědi na to, zda je dítě dostatečně připravené na školu, ale podle něj není snadné. „Školní zralost se dá změřit nebo zvážit. Dokážete ověřit, kolik dítě umí písmenek, zda zná barvy a jestli umí to nebo zase ono. Ale zapomínáme, že spousta věcí nabývá významu až v určitém kontextu. Co dítě zvládá doma, ve třídě o 25 dětech to může být problém,“ říká odborník.

S dětmi do bistra nelez. Můžou rodiny maximálně tak na dětská hřiště? Přečtěte si také:

S dětmi do bistra nelez. Můžou rodiny maximálně tak na dětská hřiště?

Právě proto je podle něj důležité nepřistupovat k zápisům či přípravě na první třídu normativně. Přál bych si, abychom už konečně přijali, že každé dítě je opravdu jiné a my se s tím musíme, co umíme a co nám dovolí podmínky, maximálně vyrovnávat,“ říká v rozhovoru pro Vitalia.cz psycholog Václav Mertin.

Rodiče předškoláků často řeší otázku, zda jejich dítě má na to, aby šlo do první třídy. Ministerstvo školství proto v minulosti zveřejnilo desatero dovedností budoucích prvňáčků. Existují nějaké signály, jež rodičům jasně řeknou, že už je ten správný čas?

Představa, že vás jako psycholog nebo pedagog změřím, zvážím a hned vím, jestli na to máte, je mylná. Takto to nefunguje. Přitom jde o tradiční odborné myšlení, které k nám přinesl v 60. letech docent Jirásek. (Jaroslav Jirásek byl klinický psycholog, jenž do tuzemské praxe po 2. světové válce zavedl úrovně školní zralosti, pozn. red.). Ten ve své knize popsal různé stupně zralosti a bylo to v pořádku. Ale my zapomínáme, a panu docentovi to vůbec nevyčítám, protože jsem ho měl rád a byl to moudrý člověk, že spousta věcí nabývá významu až v určitém kontextu. 

To znamená, že doma, protože máte jedno, dvě, nebo tři děti, to jakžtakž zvládnete. Jenže ve třídě je dětí třeba 25. A najednou se může stát, že to, co doma dítě dává, ve třídě bude problém. Vy jste nějaká, paní učitelka je také nějaká.

Vaše dítě je zvyklé na nějaký přístup – je třeba citlivé, když na něj křiknete – ale to paní učitelka nemusí vědět. A někteří učitelé mají pocit, že když něco nejde, tak když se zvýší tlak, třeba zesílením hlasu, tak že pak to půjde. Jenže ono to třeba nefunguje. A pak mi řekněte: Je to dítě zralé, nebo ne? No pro určitý typ pedagogického přístupu ano. Když narazí na paní učitelku, která je milá, vlídná a laskavá, a to dítě se do ní zamiluje, tak od ní snese leccos. A najednou je zralé.

Ale pro paní učitelku, která to dělá trochu jinak, protože je spíš taková striktní, rázná, což teda mnoha dětem může vyhovovat, protože si dají říci, pro ni bude to dítě nezralé, protože mu její přístup nebude hluboce vyhovovat. A na to my zapomínáme. Jistě, zralost se dá změřit, zvážit… Můžeme říci, jestli umí tohle nebo ono, kolik umí písmenek, barev… To všechno jde, ale školní výsledky stejně pak záleží na kontextu.

Nedostatek úplně první lásky: prapříčina problémů Přečtěte si také:

Nedostatek úplně první lásky: prapříčina problémů

A ten může být jaký?

Vezměte si třeba situaci, kdy ve třídě je 20 procent dětí s odkladem. Tak když ta třída má 25 dětí, je jich pět. A toto vaše dítě je třeba červnové, takže se může stát, že je ve třídě nejmladší. To mění situaci. Je jiná, než kdyby šlo do třídy, ve které by odklady nebyly, a my s takovým kontextem musíme počítat. Jenže to úplně neumíme – neznáme předem složení třídy, paní učitelku… Proto bych řekl, že opatrnost je namístě, protože dítě se může dostat do situace, kdy to, na co má, nemůže ve třídě z nějakých důvodů uplatnit.

Rodičům, kteří mají třeba dítě, jemuž bude šest let v září, byste tedy rozmluvil, aby jej dali do první třídy dřív, tedy třeba i pár dnů před šestými narozeninami?

Obezřetnosti je potřeba. U některých záležitostí se odborníci přou, co je správné a co ne, ale v této věci, na kterou se ptáte, se psychologové už léta vcelku shodují. Riziko u takového dítěte je zbytečně vyšší. Někdy je problém v tom, že rodiče uvažují „zvládne tu první třídu, nebo nezvládne?“ To dítě ji samozřejmě zvládne, ale mohou přijít jiné potíže.

Před 40 lety se stávalo, a já jsem toho vlastně příkladem, že rodiče chtěli dát dítě do školy dřív jenom proto, že bylo vysoké, že to říkala babička, nebo třeba umělo už číst. Moje zkušenosti ale ukazují, že dnes už tomu tak není. Pokud rodiče zvažují školu ještě před šestými narozeninami, tak ty děti jsou opravdu šikovné a ve školce se nudí. Jsou to takoví ti těžcí frajeři, klika školkových mazáků.

Nástup do školy tedy zvládnou. No jo, jenomže toto je jenom jeden kousek. Škola je živý organismus, kde navazujete vztahy, chcete se ostatním vyrovnat a nikdo nemůže zabránit tomu, aby třeba kluci mezi sebou soutěžili. A pak se může stát, že to mladší dítě třeba bude o něco pomaleji běhat. Samozřejmě nemusí, ale ta pravděpodobnost, že on bude pomalejší než jeho třeba o rok a půl starší spolužáci, je vyšší, protože může být kvůli svému věku fyzicky slabší. Může se také stát, že až kluci a holky začnou mít ve 4., 5. nebo 6. třídě trošku jiné zájmy, tak on bude spokojený ještě třeba s hraním stříleček. Oni už budou dál, jeho to ale ještě nebude zajímat.

Koktání u malých dětí většinou přejde. Je ale dobré vědět, kdy to musíte řešit Přečtěte si také:

Koktání u malých dětí většinou přejde. Je ale dobré vědět, kdy to musíte řešit

A teď si vezměte ještě jednu věc. Proč rodiče to pětileté dítě do školy dávají? No protože je přece šikovné a oni očekávají, že asi bude mít jedničky. Ono je i mít bude, ale třeba ve třetí třídě se může stát, že aby je mělo, bude muset učení věnovat více času než jeho spolužáci. A ten čas nebude moci věnovat tomu, co jej baví. 

V rozhodnutí dát do školy pětileté dítě proto vidím úskalí. Až budou na střední, či vysoké škole, tam už se to srovná, ale u těch malých dětí je to, dle mého soudu, znát. Mezi spolužáky může být věkový rozdíl i rok či rok a půl a to je u malých dětí hodně. Nepopírám, že tento rozdíl může pětileté dítě vyrovnat třeba tím, že bude umět číst, ale představa, že paní učitelka ví, že třeba Fanda je zářiový a Ivánek má odklad, a podle toho k nim přistupuje, tak to se neděje. Je to první třída a nároky jsou na všechny děti plus minus stejné – oni musí něco splnit, aby postoupili do druhé třídy, a na nějaké věkové rozdíly se nehraje.

„Máme inkluzi a musíme brát to, že i díky rodinným a společenským okolnostem se někdo vyvíjí rychleji a někdo pomaleji. Prostě tak to je,“ říká v rozhovoru pro Vitalia.cz psycholog Václav Mertin.

„Máme inkluzi a musíme brát to, že i díky rodinným a společenským okolnostem se někdo vyvíjí rychleji a někdo pomaleji. Prostě tak to je,“ říká v rozhovoru pro Vitalia.cz psycholog Václav Mertin.

Autor: Vitalia.cz/Karel Choc

Jak moc desatero dovednosti předškoláka mají rodiče brát vážně?

Jsou to určitá vodítka a na nich, myslím si, není nic vadného a není tam asi ani nic, co by nás nějak zaskočilo. Ale nemůže to být takové to normativní pojímání přípravy předškoláka. U nás máme povinnou školní docházku, tak i kdybych neuměl z toho desatera nic a naši by chtěli, abych šel do školy, tak by mě tam vzít měli. Odklad není žádná povinnost.

Těch indicií pro rodiče předškoláků je deset, ale ono jich přece může být klidně i pět nebo patnáct…

Jasně, že jo. Je to asi jako kdyby po mě někdo chtěl, abych napsal desatero ze svých zkušeností psychologa a učitele. No… Ten počet bych tak úplně nebral jako důležitý. Co se týká obsahu, tak tam jsou věci, které třeba s dítětem i děláte, jen si to v kontextu chodu rodiny ani nemusíte uvědomit. Když v něm ale čtu třeba to, že dítě by mělo zvládat „koordinaci ruky a oka, jemnou motoriku, pravolevou orientaci“, tak si říkám, jestli by zrovna třeba na toto rodiče přišli sami. Podle mě asi úplně ne. Ale je možné, že kdyby jim někdo lidsky řekl, co to znamená, tak pro posílení těchto dovedností něco budou dělat.

Zapomeňte na „výchovnou“ facku. Vyhrajeme, i když netrestáme, vzkazuje psycholog rodičům Přečtěte si také:

Zapomeňte na „výchovnou“ facku. Vyhrajeme, i když netrestáme, vzkazuje psycholog rodičům

Ve výčtu dovedností budoucího školáka se píšou také věci, které mě jako rodiče vzteklého dítěte tak trochu hořce pobavily. Například že dítě má dodržovat dohodnutá pravidla, projevuje se jako emočně stálé, bez výrazných výkyvů nálad…

Ale své děti k tomu vedete. Sám u sebe vidím, že v některých oblastech jsem se ještě nedovedl a v některých už jsem se dovedl dávno a nedělaly mi problém. U každého je to prostě jiné. Ale představa, že přijdete k zápisu, oni ta pravidla vytáhnou a teď je tam odškrtávají…

To snad, doufám, nikde nedělají.

Ne, ne, jen říkám, že chybou by bylo, kdyby dodržování těchto pravidel bylo pedagogicky normativní. Takové to: „Takto to má být a bez toho to nejde.“ Třeba já si neuměl v první třídě zavázat tkaničku, vázala mi ji spolužačka. Naučil jsem se to prostě později, protože jsem byl větší lempl. 

V pravidlech se také píše, že dítě má umět používat toaletní papír, splachovací zařízení… Banalita, ale vzpomínám si, jak často jsem okolnosti kolem vylučování řešila s dětmi.

Máme inkluzi a musíme brát to, že i díky rodinným a společenským okolnostem se někdo vyvíjí rychleji a někdo pomaleji. Prostě tak to je. Třeba před 35 nebo 40 lety byl v učebnicích popisovaný problém zvaný toaletní trénink, který měl vést k tomu, aby děti chodily samy na záchod. Dneska to nikdo moc neřeší. Ostatně proč taky, když jsou jednorázové pleny. A ony ty děti se to naučí i tak. 

Možná o pár měsíců, o rok později, ale zvládnou to. Ostatně to ani jinak nejde, když je ve třídě 25 dětí. Takže i tady bych řekl, že člověk musí brát v potaz to, že některé věci jsou prostě provozní záležitost a řešit je z psychologického hlediska je nesmysl.

Zapomeňte na posazování kojenců a chodítka, děti potřebují lézt Přečtěte si také:

Zapomeňte na posazování kojenců a chodítka, děti potřebují lézt

Vezměte si třeba situaci, kdy děti v mateřské škole jdou na vycházku. Učitelky řeknou, že se jde ven, a teď ty děti jsou skoro všechny samy připravené a je tam jeden, který čeká, až ho obléknou. A ta učitelka říká: „Já bych to i udělala, ale mám tam dalších třeba 24 dětí, které jsou už nervózní. Zvlášť když ty neoblečené děti jsou třeba tři. No, tak ty oblečené se mi tam pak, než to vyřeším, začínají rozutíkávat.“ 

Ony se to oblékání nakonec naučí i ty tři, nebo to třeba i umějí, ale jsou prostě pomalejší. Sám to znám, protože můj syn byl takový a i vnuk je takový. On se obléká, teď ho třeba zaujme kytka v šatně a on přemýšlí, zda chcípá, nebo nechcípá, a to, že se má oblékat, protože ostatní na něj čekají, to ho absolutně nezajímá, protože ta kytka je prostě důležitější.

Pro některé děti je takové chování přirozené.

Jasně, ale ne všechny. Některé se pravidlům podrobí, aniž by je zajímala, ale jiné děti jsou tak zvídavé, že si budou prohlížet, co je tohle a támhleto a že tam stojí nějací strejdové a jeden má bílou košili. A pak nedělají to, co mají, a škola s tím má problémy. A já tomu rozumím.

Normativnost zápisu do první třídy není asi nijak velká, přesto děti musí něco předvést. Ta podoba zápisů, jak ji nyní máme nastavenu, je z vašeho pohledu v pořádku? Ona je to vlastně první přijímací zkouška v životě dítěte.

My to tak možná bereme, ale je to zbytečné. Nevím, jak to vnímají učitelé, ale při takovéto jednorázové zkoušce se u malého dítěte nedá zjistit nic. Když třeba hodí míčem, je to prima, ale… Když tam je to pozitivní, tak z toho ano, z toho můžeme dělat závěry. Když hodí míčem, řekne básničku, své jméno, ví adresu…

Tak to je dobré. Ale když to neřekne, nevíte vůbec nic. Neřekl to, protože je tak blbej, že to neví? Neřekl to proto, že mu to nikdo neřekl? Neřekl to proto, že by potřeboval 20 minut, aby se se mnou skamarádil, a to my nemáme? Ale to já nepoznám. A představa, že to pozná učitelka… nepozná. 

Považujete odklady školní docházky za rozumné?

Přesto mě podoba zápisů úplně nevadí. Samozřejmě musíte být maximálně přátelský, a pokud to dítě nezareaguje, tak to není, že selhalo, ale prostě to se může stát, takže není třeba z toho dělat závěry. No, možná bychom z toho mohli dělat závěry pro 1. září, ale už ne pro 2. nebo 3. září, protože některé děti potřebují určitou dobu, aby to daly. 

Já už vím, že musím, takže zatnu zuby a něco předvedu, protože je na tom závislé třeba moje zaměstnání nebo kšeft. Ale to dítě? To to takto nevnímá. Takže nic nepředvede, protože se mu nechce, ale přitom to třeba všechno umí, a když potom jdete za dveře, tak to všechno odříká, protože si to pamatuje.

Škola se nemá co na dítě dívat, škola má být přátelská a udělat vše proto, aby se dítě do první třídy těšilo, proto má být první kontakt s ní velmi příjemný. A ještě třeba k tomu něco dostalo, nějaký bonbón, že jo. Takové věci si totiž děti velmi dobře pamatují, neřádi jedni. 

Má smysl to, co se stane u zápisu, řešit i z toho úhlu pohledu, že zápis je třeba v dubnu, ale do školy se jde až v září? Pět měsíců je přece pro vývoj malého dítěte dlouhá doba.

Samozřejmě, že kdybyste školní zralost dělala 31. srpna, tak by to bylo úplně nejlepší, ale není to organizačně možné. Dříve bývaly zápisy v lednu nebo únoru, teď je ta doba kratší, protože jak jste správně řekla, od dubna, od května je ještě dlouhá doba a to se může leccos stát. Ale vezměte si to na druhou stranu. Když by vám v lednu řekli: „Paní Nováková, ten váš Fanda, všimla jste si těch sykavek?“ A paní Nováková řekne: „Ne, já to neslyším.“ „Vidíte, tak si zajděte na logopedii.“

Z toho pohledu je duben–září krátká doba, ale leden–září je doba o něco delší, takže řada rodičů ještě měla nějaký větší prostor. Protože někteří rodiče si teprve až u zápisu uvědomili, že jejich dítě už jde do školy a že je hold třeba najednou některé ty věci popostrčit. Tak se jim třeba mohli věnovat. Takže pro mě ta doba od února do září byla přátelštější.

PhDr. Václav Mertin

Dětský psycholog, pedagog a autor řady přednášek i publikací o výchově. Svůj profesní život zasvětil zejména otázkám uplatnění psychologie ve školství, individualizace vzdělávacího přístupu k dětem, poruchám učení a chování, vstupu dítěte do školy, domácímu vzdělávání nebo poradenství rodičům.

Vystudoval Univerzitu Karlovu (UK), kde mu diplomovou práci vedl světově uznávaný dětský psycholog Zdeněk Matějček. Václav Mertin přes čtyřicet let pracoval v pedagogicko-psychologické poradně pro děti. Léta také působil na katedře psychologie Filozofické fakulty UK. Patří mezi přední popularizátory výchovy bez fyzických trestů, v níž ale rodič nepostrádá autoritu. Je autorem či spoluautorem mimo jiné knih Výchova bez trestů, Škola pro děti, Ze zkušeností dětského psychologa nebo Psychologie pro učitelky mateřských škol.

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 »