Nadaná hudební skladatelka zemřela dva měsíce po svatbě. Osud Vítězslavy Kaprálové dojímá k slzám

12. 6. 2024

Sdílet

Ve věku pouhých pětadvaceti let zemřela geniální dirigentka a skladatelka Vítězslava Kaprálová, osudová láska spisovatele Jiřího Muchy. Ten jejich vztah popsal ve své knize Podivné lásky, kterou možná máte doma v knihovně. Co se vlastně stalo?

Mladá a mimořádně nadaná hudební skladatelka zemřela dva měsíce po svatbě se synem slavného malíře Alfonse Muchy. Jaký byl její život a jakými zdravotními potížemi trpěla?

Neskutečný talent a píle

Vítězslava Kaprálová (1915–1940) pocházela z vážené hudební rodiny. Její otec, který svou zbožňovanou dcerku oslovoval Vitulka, byl žákem známého hudebního skladatele Leoše Janáčka a provozoval oblíbenou hudební školu. Sám byl také autorem mnoha poutavých hudebních skladeb. 

Maminka stejného jména jako dcerka pak nezůstávala v hudbě pozadu, byla učitelkou zpěvu. Vitka, jak se také Vítězslavě říkalo, měla opravdu po kom zdědit svůj velký talent a měla našlápnuto na skvělou kariéru. Byla to nesmírně půvabná a okouzlující dívka, která hudbu skládala už od dětství, jednu ze svých prvních skladeb složila prezidentu Masarykovi. V patnácti letech pak nastoupila na konzervatoř a každý věděl, že z ní jednou něco bude.

Franz Kafka byl nekuřák, abstinent a vegetarián, přesto ho zabila vážná nemoc Přečtěte si také:

Franz Kafka byl nekuřák, abstinent a vegetarián, přesto ho zabila vážná nemoc

Na studiích to nadaná dívka dotáhla opravdu daleko. V Brně zakončila konzervatoř klavírním koncertem d moll, který si ale také vlastnoručně oddirigovala, což vůbec nebylo běžné. Dále pokračovala ve studiu v Praze u známého hudebního skladatele Vítězslava Nováka, kde se učila i dirigovat u významného dirigenta Václava Talicha. Toto studium velice úspěšně absolvovala svou Vojenskou symfonietou s Českou filharmonií. 

Následovala cesta do Paříže k dirigentu Charlesi Munchovi. A aby toho nebylo málo, soukromě ještě studovala u Bohuslava Martinů. Co více si mohla mladá talentovaná dívka přát. Ale kromě vší té dřiny a píle, měla vlastně nějaký čas na osobní život? A neodneslo to její zdraví?

Vášnivá láska, smrt dítěte, odcizení. Skladatele Gustava Mahlera nakonec zabila infekce Přečtěte si také:

Vášnivá láska, smrt dítěte, odcizení. Skladatele Gustava Mahlera nakonec zabila infekce

Od dětství trpěla tuberkulózou

Vítězslava Kaprálová byla velmi křehká a citlivá dívka, která zároveň překvapovala vnitřní silou a odhodláním. Oddirigovat celý koncert vyžadovalo neskutečnou fyzickou sílu a vůli, což jen zdánlivě křehká Vitka skutečně měla. Uměla totiž dirigovat i lidi. 

Ale její zdraví nebylo úplně pevné. Často bývala nemocná, trpěla melancholií a její citlivá psychika mnohdy udělala své. 

Její zdravotní problémy byly chronického rázu a čas od času musela pobývat v plicním sanatoriu na Slovensku – jezdila tam hlavně v dětství, když onemocněla tuberkulózou. 

Povahově byla velmi romantická, milovala přírodu, tajemno a svou zemi, což všechno dokázala vnášet do svých skladeb, s nimiž slavila obrovské úspěchy. Všichni věřili tomu, že tato výjimečná žena jednou dobude svět.

V roce 1938 před začátkem války psala rodičům do Brna z Anglie po velkém koncertování na festivalu Mezinárodní společnosti pro soudobou hudbu. Večer jsem zahajovala koncert hned po hymně. Jeden Mister mně povídal, že to moje číslo bylo dosud nejhezčí a že o mně svět moc a moc uslyší, abych si na to jednou vzpomněla.

První česká lékařka sice vystudovala medicínu, ale nejdřív mohla pracovat jen jako porodní bába Přečtěte si také:

První česká lékařka sice vystudovala medicínu, ale nejdřív mohla pracovat jen jako porodní bába

Poměr se starším ženatým mužem

Velkou slabostí charismatické dívky byli muži, kteří po ní naprosto bláznili. A ona si toho byla velice vědoma. Žádným tajemstvím není její poměr se starším a hlavně ženatým hudebním skladatelem Bohuslavem Martinů, u něhož studovala. Také na studiích v Paříži vstoupilo do jejího krátkého života několik mužů. Zasnoubená byla s Rudolfem Kopeckým, ale protože v době, kdy se dostávali nacisté k moci, s nimi sympatizoval, Vitka kvůli tomu rázem jejich vztah utnula.

To bylo pro ni absolutně tabu, dobře si uvědomovala, kam svět spěje a co se může stát. Začátek druhé světové války nesla po emocionální stránce velice těžce, úplně to její křehkou duši odrovnalo. Do partitury skladby Concertino pro housle, klarinet a orchestr si napsala „Job 30:26“, odkazujíc na pasáž z Bible. Dobro jsem s nadějí očekával, a přišlo zlo, čekal jsem na světlo, a přišla temnota. A rozhodně to mohlo přispět k jejímu předčasnému odchodu, stejně jako tomu bylo u jiných extrémně nadaných a citlivých umělců, například Karla Čapka, kterého společně s celým národem upřímně oplakávala a na jehož počest složila hned dvě skladby.

Karel Čapek musel každý rok do lázní. Nemoc oddálila i jeho sňatek Přečtěte si také:

Karel Čapek musel každý rok do lázní. Nemoc oddálila i jeho sňatek

Těšila se na děti s milovaným mužem

I v těžké době, kdy se Vitce nedařilo a cítila se velmi osamělá, jí osud přihrál do cesty velkou lásku. Takovou lásku, kterou člověk potká jednou za život. Jejím vyvoleným se stal nedostudovaný lékař, spisovatel a válečný zpravodaj Jiří Mucha, který byl synem slavného malíře Alfonse Muchy (1860–1939). Vzali se 23. dubna 1940 a Vitulka psala z Paříže rodičům radostné dopisy o tom, že se vdala a jak moc se těší na to, až budou mít s Jirkou děti.

Prosíme o vaše požehnání a doufáme oba, můj drahý Jirka i já, že vám budeme moci oplatit všechny starosti láskou a pohodlím až do příchodu vnoučků, a i potom. Kluk bude Ondřej po Jirkově dědovi a dceruška po tatínkovi Vendulka (Václava). Ještě ovšem počkáme, nejde to tak jedna dvě. To už budeme u vás, věříme z hloubi duše a těšíme se nesmírně, vaše Vitulka a Jiří Muchovi.

Nikdo ale nemohl vědět, že tento nádherný sen se talentované Vitulce nikdy nesplní. V té době jí totiž zbývaly už jen tři týdny života. Zpráva o její náhlé smrti každého zdrtila, její otec Václav Kaprál se o tom dozvěděl, zrovna když v Luhačovicích dirigoval koncert.

Podívejte se na fascinující příběh Vítězslavy Kaprálové

Napsal o ní knihu

Cítil jsem, že se vzdaluje, že se jedno po druhém trhá pouto, které ji vázalo k tomuto světu, a zůstávala už jen láska. Držela mne oběma rukama, ale odcházela. Slyšela hudbu. ‚To je Julietta…‘ Na okně šuměly vlny deště. Začínalo svítat. Její dech se krátil. Pak ustal nadobro. Položil jsem jí ruku na oči a řekl jsem: ‚Sbohem Vitko‘, napsal Jiří Mucha ve své pozdější knize Podivné lásky věnované právě vztahu s jeho první ženou Vitkou.

Slavná hudební skladatelka zemřela ve věku pětadvaceti let, a to necelé dva měsíce po svatbě s milovaným mužem. Když si vzpomeneme na plicní sanatoria, v nichž často trávila svůj čas, je možné, že se jí v plné síle vrátila tuberkulóza, která ji nakonec zabila. Ale jednoznačně potvrzeno to není, spekulovalo se například také o tyfoidní horečce, která se rovněž často uvádí jako příčina smrti. Skutečná příčina předčasného úmrtí už asi zůstane neznámá. 

I za tak krátký život stačila Vítězslava Kaprálová složit desítky skladeb, z nichž zřejmě všechny byly po její smrti nalezeny a uchovány. O její hudební odkaz se stará hudební společnost The Kapralova Society se sídlem v Torontu. Česká akademie věd jí pak v roce 1946 udělila členství in memoriam.

Víte, na jaké choroby zemřeli slavní lidé? Udělejte si náš kvíz

Hudební skladatel Bedřich Smetana v pražském muzeu voskových figurín Madame Tussaud

Kvíz: Syfilis, tuberkulóza, otrava, nehoda. Co zabilo slavné osobnosti?

Zdroje: 

Mucha Jiří. Podivné lásky. Mladá fronta: 1988.

Vítězslava Kaprálová: Dopisy domů. Korespondence rodičům z let 1935–1940, Academia

kapralova.org; vitalplus.org; idnes.cz; wikipedia.org

Autor článku

Externí redaktorka a copywriterka píšící pro webové i tištěné magazíny. Zaměřuje se na oblast zdraví, historie medicíny, psychologie, filozofie, etikoterapie a alternativní medicíny.

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