Levandule pomáhá v lékařství i gastronomii. Jak ji pěstovat a využít?

3. 11. 2021 8:00
přidejte názor
Autor: Pixabay

Provoní interiér, pomůže od stresu a spolehlivě odpudí kdejaký hmyz. Levandule patří mezi byliny, které si lidé zamilovali nejen kvůli jedinečnému vzhledu a netradiční vůni, ale také pro jejich široké způsoby využití. Jaké má levandule účinky, proč je nepostradatelným pomocníkem v kuchyni a jak ji vypěstovat?  

Levandule si vás na první pohled získá nejen svým jedinečným vzhledem, ale i specifickou dlouhotrvající vůní, kterou s jinou rostlinou zaměníte jen těžko. Původ má tento vytrvalý polokeř v oblasti západního Středomoří, pěstovat lze ale snadno i v našich středozemních podmínkách, kde dorůstá až úctyhodných 80 centimetrů. A co víc, díky své nenáročnosti je rostlina vhodná i pro začínající pěstitele.

Levandule patří do čeledi hluchavkovitých rostlin, a ačkoli je v Česku mezi pěstiteli nejrozšířenější levandule lékařská, celkově rozlišujeme kolem 40 druhů, a to včetně kříženců. Typickou levandulí je polokeř, výjimkou však nejsou ani vytrvalé byliny s dřevnatějícími bázemi, jež kvetou fialovým, bílým nebo růžovým květem. Listy jsou obvykle jednoduché, celokrajné, někdy též zubaté nebo zpeřené, často s přítomnými stříbřitými chloupky.

Druhy levandule

Jak už zaznělo výše, nejznámější je mezi českými pěstiteli levandule lékařská, která je známá také pod názvem levandule úzkolistá. Je typická klasickou sladkou květinovou vůní a svým uklidňujícím účinkem. Její výhodou je téměř dokonalá mrazuvzdornost. Pěstovat lze hned několik kultivarů o velikosti 20 až 60 centimetrů s fialovo-modrými, ale i bílými či růžovými květy a stříbrnými listy.

Mezi lidmi je velmi oblíbený také hybrid, který vznikl zkřížením levandule lékařské a levandule širokolisté. Znát ho můžete pod označením levandule prostřední, či zkráceně lavandin. Tato odrůda je typická kafrovější, osvěžující a velmi intenzivní vůní, kterou zdědila po levanduli širokolisté. Květy levandule prostřední mají léčivé schopnosti, konkrétně pomáhají při respiračních obtížích a namožených svalech.

Nevýhodou této rostliny je nižší odolnost vůči silnému mrazu, lépe se proto hodí na chráněná stanoviště. Co se týče vzrůstu, keříky mohou být až metr vysoké a bývají husté a vitální. Obvyklé jsou dlouhé stonky s velkým množstvím květů. Kromě typických fialových odrůd se můžeme setkat také s vyšlechtěnou bílou verzí s panašovanými listy.

Pokud bychom se zaměřili na dekorativní druhy, které se hodí spíše pro pěstování v květináči jako přenosné rostliny, jistě by sem patřila levandule korunkatá, která je ve venkovním prostředí schopná zvládnout lehké zimy, ale silné mrazy ustát nemusí. Levandule francouzská, jak se této odrůdě také říká, je typická nahloučenými nachově i růžově zbarvenými květy, které vytrvávají od června do září. Podobně náchylná vůči mrazu je pak také španělská levandule, která je výjimečná tmavým květenstvím, světle stříbřitými listy a intenzivní vůní.

Levanduli zoubkatou zas poznáte podle typických jemně vykrajovaných lístků, dlouhé doby kvetení a velmi sladké vůně. Nezvykle dělené listy a dlouhou dobu kvetení má pak také levandule rozeklaná, kterou lze pěstovat také jako letničku.

Pěstování levandule

Pokud jde o to, kde a jak pěstovat levanduli, lze tak učinit jak na zahradě, tak na balkonech a terasách. Její pěstování totiž není nijak složité a s trochou snahy jej zvládne i nezkušený začátečník. Z obecného hlediska bude levandule vděčná za co nejslunnější místo. Pravděpodobně se vyrovná i s polostínem, nebude však tolik kvést. Negativní vliv pak bude mít nedostatek světla také na vůni, která nebude tak intenzivní.

Pokud chcete pěstovat levandule ze semínek, musíte je nejlépe vysadit už v únoru, nejpozději však v březnu. O poznání jednoduší jsou však pro pěstování levandule sazenice. Ty pořídíte na trzích, v zahradnictvích, hobby marketech i v některých květinářstvích.

Při pěstování je třeba dávat pozor na podobu půdy, pokud bude těžší, hrozí levanduli přemokření a následné odumírání kořenů, a to především v zimě. Z tohoto důvodu se půdu doporučuje vylehčit drobným štěrkem, konkrétně do půlmetrové hloubky, díky čemuž bude krček keříků udržován v suchu. Štěrk může být nápomocný také v případě, že se potýkáte s plevelem. Jeho další výhodou je, že akumuluje teplo a navíc dobře vypadá. Podobně prospěšný bývá také dolomitický vápenec a dřevěný popel.

Zajímá vás, jak se starat o levanduli? Její velkou výhodou je fakt, že je velmi odolná vůči suchu, sazenička ale naopak vyžaduje zálivku, a to do doby, než se ujme. Pokud se levanduli rozhodnete pěstovat v nádobách, je podmínkou propustný substrát. Myslet je třeba i na to, že v takové situaci je rostlina plně odkázaná na naši zálivku, a tak hlína nesmí zcela vyschnout.

V případě, že máte strach, že levanduli přelijete, zkuste do nádoby přidat silnou vrstvu drenáže (štěrku, perlitu, keramzitu) a naplnit ji speciálním substrátem pro bylinky, anebo směsí, která obsahuje písek, hlinitou zeminu a vyzrálý kompost.

Pokud se rostlinu rozhodnete pěstovat, bude vás pravděpodobně zajímat také to, kdy stříhat levanduli. Jestliže si přejete, aby byl levandulový keřík kompaktní, hustý, zelený a bez vyholené spodní části, je třeba jej stříhat každoročně o celou třetinu. Kdy je vhodný čas, záleží na jednotlivých odrůdách. Zatímco časně kvetoucí levanduli lékařskou je třeba stříhat do půli srpna, levanduli prostřední a další později kvetoucí odrůdy stříháme na jaře.

Množení levandule

Existují minimálně dva způsoby, jak rozmnožit levanduli, a sice hřížením či řízkováním. V případě hřížení 3–4 leté rostliny ohneme pár větviček k zemi a přihrneme hlínu tak, aby vrcholky zůstávaly nad povrchem půdy. Hřížení provádíme na podzim po ostříhání květů. Na jaře pak větvičky odhrabeme. V tu dobu by již měly mít vytvořené kořínky. Větvičky následně odstřihneme a zasadíme samostatně.

V případě řízkování se levandule množí pomocí polodřevitých řízků, přičemž ideálním obdobím pro tuto činnost je březen či duben. Řízky dlouhé 8–10 cm zapíchneme do půdy tak hluboko, aby čněly jen zelené lístky, a dbáme přitom na to, aby půda byla neustále vlhká. Do podzimu rostlinu stále zaléváme, až levandule vytvoří kořínky.

Sběr a sušení levandule

Kámen úrazu může přijít v momentě, kdy se vypěstovanou levanduli rozhodnete zužitkovat. Pro její sběr je totiž potřeba vychytat správnou chvíli. Pokud se rostlině daří, bude vám s velkou pravděpodobností kvést intenzivně zhruba od poloviny června až do poloviny srpna, se sběrem ale nesmíte příliš otálet. Rostlinu je třeba sebrat v momentě, kdy její květy nejsou ještě zcela rozvité.

Zda budete sbírat pouze květy s krátkými stonky, nebo i stonek s lístky, je zcela na vás. Tak či onak, myslete na to, že stonky nikdy neodstříháváme celé a nesmíme zasáhnout dřevěnou část keříku. Rostlina by tím velmi trpěla. K odštípnutí stonku je ideální použít zahradnické nůžky, lze tak ale učinit i rukou.

Při sběru levandule je nutné dodržet ještě několik dalších postupů. Konkrétně byste se měli držet těchto bodů:

  • levanduli je nutné sbírat za slunného dne, kdy mají květy největší sílu, vlhká rostlina by uhnila,
  • sbírají se zejména květy, a to ještě před plným rozvinutím, jinak by začaly opadávat,
  • řežeme vždy celé stonky, a to včetně květenství,
  • květy po ustřihnutí svážeme do snopů a zavěsíme na suché místo s čerstvým vzduchem,
  • ulomené zbytky stonků a květů nevyhazujte, lze je zužitkovat například do šatníku proti molům.

Co se týče toho, jak sušit levanduli, existují tři základní způsoby, a to sušení v tmavé místnosti, v sušičce a na slunci. Pokud zvolíte první z možností, tedy sušení v místnosti, ujistěte se, že je opravdu tmavá. V opačném případě by totiž levandule vybledla a ztratila svou fialovou barvu. Rostlinu zavěste svazkem květů dolů a připevněte hřebíčkem, skobičkou či provázkem. Sušení tímto způsobem může trvat dva až čtyři týdny.

V případě sušičky na ovoce myslete na to, že teplota sušení by neměla překročit 35 °C. Na sluníčku lze pak sušit uvnitř i venku. Rostlinu stačí vyskládat na dřevo, které je pro sušení nejlepší. Počítejte ale s tím, že v případě sušení levandule na slunci její barva značně vybledne.

Využití levandule

Čerstvá i sušená levandule nabízí mnoho způsobů využití. Už v dávných dobách byla známá pro své blahodárné účinky na trávicí soustavu. Uvolňuje totiž hladké svalstvo a podporuje tvorbu žluči, čímž zlepšuje trávení tuků. Působí i proti nadýmání.

Mnohé současné studie navíc dokazují, že se levandule osvědčila také jako tišící a protikřečový prostředek, který současně zvyšuje účinky sedativ, přičemž nejsilnější je v tomto ohledu rostlina ve formě oleje. Některé vůně obsažené v levanduli mají totiž vliv na určité druhy mozkových vibrací, jež jsou spojeny s relaxací

Nápomocná může být rostlina i v případě, že trpíte nespavostí či obecně obtížemi spojenými se spánkem. Podle různých zdrojů má levandulová vůně dokonce srovnatelné účinky s léky na spaní. Konkrétně působí tak, že spánek prohlubuje, čímž jej činí kvalitnějším. Stačí si vyrobit plátěný polštářek ze sušených levandulový květů.

Zmíněný levandulový olej má účinky také proti mikrobům, působí totiž jako přírodní desinfekce. Pokud jej nanesete do rány, bude rovněž podporovat její hojení. Použít lze tímto způsobem také levandulový nálev na obklad a omývání. Sušená levandule může poměrně spolehlivě nahradit také funkci repelentu. Zvláště účinná se ukázala v případě odpuzování šatních molů.

O tom, že je levandule opravdu všestranná, hovoří také fakt, že má nezastupitelné místo i v kuchyni. Používá se například jako přísada do voňavých džemů. Květy navíc poslouží jako základ pro výrobu levandulového octa. Tato rostlina je skvělým pomocníkem také při pečení. Zpestřit chuť lze například levandulovým cukrem, který si snadno vyrobíte tak, že sušené květy vložíte do uzavřené dózy s pískovým cukrem a necháte přibližně týden uležet. Pokud chcete docílit intenzivnější levandulové vůně, vložte do cukru čerstvé květy.

Velice oblíbený je také levandulový sirup, k jehož výrobě je zapotřebí:

  • 0,5 litru vody,
  • 0,5 kg cukru,
  • 1 citrón,
  • 10 g kyseliny citrónové,
  • asi 10 květů (stonků) levandule.

POSTUP: Do převařené a vychladlé vody ponořte stonky levandule a přidejte citron. Ingredience nechte 1 den vyluhovat. Vodu následně slijte přes pláténko a ohřejte asi na 40 °C. Dále ve vodě rozpusťte cukr a kyselinu citrónovou. V momentě, kdy se všechen cukr rozpustí, je levandulový sirup hotový.

Nasekané květy levandule lze rovněž přidat do rýže, jehněčího i králičího masa a mohou být i součástí marinád. Velmi dobře se tato rostlina kombinuje s:

Pokud se na účinky podíváme po chemické stránce, zjistíme, že jsou levandulové silice velmi složité. Skládají se totiž z více než 150 látek. Při vtírání do pokožky se velmi rychle vstřebávají a v krvi je lze zjistit už do 5 minut od aplikace. Pozor však na nežádoucí účinky. V některých případech se může objevit vyrážka. V takovém případě přestaňte rostlinu ihned užívat a o další aplikaci se poraďte se svým lékařem.

Zdroj: bylinkovyraj.net, lékárna.cz, ireceptar.cz

  • Žádné názory
  • Našli jste v článku chybu?
'; 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'; } }
'; 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 »