Díky krmení ze lžičky a pití z hrníčku se dítě učí mluvit

Sdílet

Dnešní děti jedí pozdě tuhou stravu, a proto špatně mluví. Pravda, nebo omyl? Klinická logopedka vysvětluje souvislosti mezi příjmem potravy a schopností správně vyslovovat.

V nedávném článku na serveru Vitalia.cz popisuje mluvčí Rady Asociace klinických logopedů Lenka Bartáková současný stav, kdy děti mluví hůř než dříve, a možné příčiny. Málo známou souvislostí je vliv zavádění pevné stravy a pití z hrníčku na rozvoj řečových dovedností, kterému se věnujeme v tomto článku.

Do čtyř až šesti měsíců věku se děti v našich zeměpisných šířkách obvykle kojí nebo přijímají mléčnou výživu z láhve se savičkou. Je to proto, že vnitřní prostor úst je zpočátku velmi malý, zcela zaplněný jazykem a z vnější strany ohraničený sacími „tukovými“ váčky ve tvářích, nevzniká tedy mnoho prostoru pro pohybové variace jazykem. Za této anatomické situace lze efektivně přijímat jen tekutou stravu.

 

V prvním půlroce života dítě vydává první hlásky. Díky anatomickým poměrům mezi jazykem a čelistí, kdy jazyk stále zaplňuje velkou část dutiny ústní, jsou to nejčastěji vysoké přední a střední samohlásky (i, e, a). V tomto období se začínají objevovat i zadní samohlásky (o, u). Děti je oproti samohláskám i, e, a realizují čtyřikrát méně často, jen v pětadvaceti procentech z celkového objemu produkce samohlásek, protože tyto souhlásky jsou artikulačně náročnější. Souhlásky při hře dítěte se zvuky (vokalizaci) obvykle nepozorujeme.

V ústech půlročního dítěte se dějí velké věci

V šesti měsících věku je však situace již zcela jiná. Prostor vnitřních úst se výrazně zvětšuje, a to jak v horizontálním směru, protože spodní čelist roste do délky, tak i vertikálně, protože sací váčky ve tvářích jsou postupně absorbovány. Aby dítěti při sání neutíkala tekutina z úst, rty a tváře musejí začít být aktivnější. Po vymizení sacích váčků se vyvíjí stabilita čelisti, pomocí postupné koordinace funkce svalů.

Díky poklesu hrtanu i hltanu poklesá i jazyk. Ten je nyní umístěn více vzadu v dutině úst a hrot jazyka se dotýká alveolu (tedy dásňového výstupku u horních zubů, na němž se tvoří hlásky). Tento nově vzniklý prostor úst umožňuje dítěti začít přijímat pevnou stravu díky nově vzniklé možnosti pohybovat jazykem nahoru, dolů i do strany.

Od kašiček k pevné stravě

V půlroce věku bývají dětem nabízeny příkrmy, hladké kaše nabízené ze lžičky. Do devíti měsíců věku k nim poté přibývají kaše s kousky a různé kukuřičné křupky a dětské sušenky, které lze snadno rozmělnit v ústech.

Od devíti měsíců věku můžeme již dítěti nabízet pevnou stravu rozmačkanou vidličkou či nakrájenou na malé kousky. V roce věku je dítě již schopné jíst víceméně stejné pokrmy jako zbytek rodiny jen s omezením soli a dalších dochucovadel.

Hrníček a lžička – posilovna pro jazyk a rty miminka

Všeobecně lze říci, že v období od půl roku do jednoho roku věku je pro dítě nejdůležitější naučit se pohybovat jazykem jinak než v prvním půlroce, kdy děti jazykem pohybují jen dopředu a dozadu v horizontálním plánu pohybu. Při krmení ze lžičky a pití z hrníčku se musí naučit pohybovat jazykem zralým způsobem, tedy nahoru a dolů ve vertikálním plánu pohybu. Při zpracování pevné stravy zase pohybovat jazykem do strany, tj. posunout sousto na místo budoucích stoliček, kde jsou čelisti silnější, schopné pevnou stravu efektivněji rozmělnit.

Hlavním klinickým faktorem, který tuto změnu umožní, je zvyšování síly a preciznosti pohybu rtů, které si dítě cvičí jak při snímání pevné stravy ze lžičky, tak i při pití z hrníčku.

Druh stravy souvisí s rozvojem řeči dítěte

Jak všechny tyto změny ovlivní rozvoj řeči? Zvětšování vnitřního prostoru úst a pokles hrtanu kojence ovlivňuje i rezonanci jeho hlasových projevů. Zdvihač měkkého patra začíná efektivně ovlivňovat pohyb měkkého patra při polykání a vokalizaci. Dítě dokáže změnit výšku a sílu hlasu, což je důležitý krok předcházející vývoji zvukových vlastností řeči.

Při hře se zvuky se v „řeči“ dítěte zhruba od půl roku věku začínají objevovat i souhlásky. Ty však nevznikají dříve, než dítě začne podobný pohyb realizovat při příjmu potravy.


Autor: Unspash.com / Cristian Newman, podle licence: Public Domain CC0

Pokud budeme děti krmit způsobem, který nepodporuje jejich orálně motorický vývoj, neznamená to, že se mluvit vůbec nenaučí, ale může jim to trvat déle

Například Suzanne Evans Morrisová vysledovala, že mnohé pohyby, které dítě začalo využívat při příjmu potravy, využilo o několik týdnů později také při své hře se zvuky (Pre-feeding skills. A comprehensive resource for mealtime development).

Pozorovala kupříkladu, že pokud se dítě naučilo zavírat rty na lžíci při příjmu potravy ze lžičky, případně i použít horní ret při pití z hrníčku, začalo posléze také produkovat bilabiály (p, b, m), tedy hlásky tvořené rty.

Dokud při krmení převládal pohyb jazykem dopředu a dozadu, nepozorovala při hře dítěte se zvuky žádné řečové zvuky vyžadující pohyb jazykem nahoru na alveodentální výběžek (t, d, n). Tyto zvuky se začaly objevovat až poté, co při příjmu potravy začal být dominantní vyspělý způsob sání, při kterém se jazyk pohybuje nahoru a dolů, tj. po devátém měsíci věku.

Hlásky (k, g) pozorovala v řeči dítěte až poté, co bylo schopno dítě při polykání oddělit, disociovat přední a zadní část jazyka.

A jsou tu další souvislosti. Dítě se po vymizení sacích polštářků v tvářích musí naučit ovládat tváře aktivně, tj. vtahovat je, aby mu při sání neutíkala tekutina z úst. Později je musí umět aktivně zapojit při zpracování pevné stravy, aby mu potrava nepadala do vnitřních tváří, ale aby je tváře udržely na ploše stoliček. Stejně jako tyto „stravovací dovednosti“ se musí naučit zapojit tváře při produkci frikativ (f, v, š, ž, s, z) tak, aby výdechový proud vycházel středem úst a nerozléval se do stran po celých ústech. Proto tyto hlásky děti začínají produkovat až poté, co jsou schopny žvýkat pevnou stravu a aktivně při tom zapojovat tváře.

Autoři Steeve, Moore, Green a Engel (1999) zase našli spojitost mezi specifickou kontrakcí svalů čelisti při žvýkání a při žvatlání dítěte starého devět měsíců věku.

Řekni mi, co jíš, a já ti řeknu, kdy začneš mluvit

Tyto souvislosti mezi orálně motorickými pohyby při řeči a příjmu potravy neznamenají, že děti, které nebudou přijímat potravu orálně, se mluvit nenaučí. Pokud však budeme děti krmit způsobem, který nepodporuje jejich orálněmotorický vývoj, může jim to trvat déle.

Například pokud při krmení ze lžičky po osmém měsíci věku budeme stále otírat dítěti potravu o horní zuby, znemožníme tím dítěti aktivně používat horní ret a snímat potravu ze lžičky vyspělejším způsobem.

Děti s inaktivními rty obvykle hlásky tvořené rty neprodukují. Pokud po roce věku nabízíme dítěti pro příjem tekutin jen láhev se savičkou nebo s pítkem, způsobíme tím opoždění ve zrání orálně motorických pohybů. Dítě bude dále pohybovat jazykem v horizontálním plánu, protože savička či pítko znemožní trénovat pohyby nahoru a dolů jazykem. Při tomto způsobu sání nejsou dostatečně aktivní ani tváře a rty. Tyto děti mohou poté realizovat velké skupiny hlásek (d, t, n, l, c, s, z) s jazykem mezi zuby, případně až mezi rty. A podobně pokud budeme zdravému dítěti nabízet pevnou stravu ke žvýkání pozdě, po desátém měsíci věku, může se u něj opozdit počátek žvatlání.

Pokud tedy děti krmíme vhodným způsobem, můžeme tak trénovat jejich orální motoriku a podpořit i vývoj jejich řeči.

Galerie: Děti mají černé mléčné zuby. Někdy všechny

Autor článku

Mgr. Barbora Červenková

Klinický logoped

Specializuje se především na terapeutické vedení klientů s poruchami příjmu potravy a klientů s celkovým psychomotorickým opožděním, zajímá se o problémy ve zpracování senzorických informací u dětí.

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