Jak se daní příjmy z pronájmu za rok 2023

14.03.2024 | , Finance.cz
DANĚ


perex-img Zdroj: Shutterstock

Pronajímáte nemovitost a nevíte, jak příjem v podobě nájemného zdanit a zda musíte vést nějakou evidenci? Příjmy z pronájmu lze šikovně optimalizovat např. využitím paušálu na dopravu. Nezapomeňte také, že příspěvky do fondu oprav jsou daňovým výdajem.

Pronájem patří mezi oblíbené formy přivýdělku pro stále větší množství lidí, jak se daní příjmy z pronájmu?

Jak se daní příjmy z pronájmu bytu? 

Pokud pronajímáte byt, musíte samozřejmě příjmy z pronájmu zdanit podle zákona 586/1992 Sb., o daních z příjmů, ve znění pozdějších předpisů. Při výpočtu daně z příjmů můžete použít slevy na dani i nezdanitelné položky.

Příjem do čtyřnásobku průměrné mzdy (161 296 Kč za měsíc v roce 2023, 175 868 Kč za měsíc v roce 2024) se daní 15 %, příjem nad touto hranicí pak 23 %.

Zákon rozlišuje, zda je pronajímaná nemovitost v majetku fyzické osoby, nebo jde o nemovitost zapsanou v obchodním majetku. V prvním případě se příjmy z pronájmu řídí paragrafem 9 výše uvedeného zákona. U nemovitostí zapsaných v obchodním majetku, vedených v účetnictví nebo daňové evidenci, se uplatní paragraf 7 (příjmy z podnikání a jiné samostatné výdělečné činnosti).

Příjmy z pronájmu, když pronajímáte jako fyzická osoba

Pokud pronajímáte vlastní byt nebo nemovitost jako fyzická osoba, která je majitelem a zároveň pronajímatelem nemovitosti, neobejdete se ve svém přiznání k dani z příjmů fyzických osob bez přílohy číslo 2. Ta slouží pro výpočet dílčího základu daně z příjmů z pronájmů podle § 9 zákona o daních z příjmů.

Paragraf 9 vymezuje příjmy z pronájmu jako příjmy plynoucí z pronájmu nemovitostí či jejich částí nebo bytů a jejich částí. Pokud například pronajímáte ve svém dvougeneračním domku jednu bytovou jednotku, máte povinnost tyto příjmy přiznat a zaplatit vypočítanou daň. Pokud pronajímáte nemovitost, která je společným majetkem manželů, zdaňuje příjmy z pronájmu pouze jeden z nich.

Od příjmů si můžete odečíst výdaje vynaložené na dosažení, zajištění a udržení příjmů plynoucích z pronájmu nemovitosti. Výdaje můžete uplatnit buď ve skutečné výši, nebo paušálem, tedy procentem z příjmů z pronájmu. Musíte sami zvážit, co je pro vás výhodnější. Pokud však uplatníte v řádném daňovém přiznání daňové výdaje procentem z příjmů, nemůžete v případném dodatečném daňovém přiznání změnit způsob uplatnění výdajů a přejít z paušálních výdajů na skutečné výdaje. Naopak je to možné.

Pokud máte příjmy z pronájmu jako fyzická osoba, neplatíte z těchto příjmů sociální ani zdravotní pojištění. Pokud v takovém případě nemáte zaměstnání na pracovní smlouvu, nejste student, nepobíráte důchod nebo rodičovský příspěvek, tedy ve zkratce nemáte vyřešený svůj vztah se zdravotní pojišťovnou, pamatujte, že si jako osoba bez zdanitelných příjmů (OBZP) musíte platit zdravotní pojištění. To se pro rok 2024 zvyšuje na 2552 Kč.

Stáhněte si přiznání k dani z příjmů FO za zdaňovací období 2023

Jaký typ přiznání potřebujete Interaktivní XLS
Uplatňuji paušál stáhnout
Vedu účetnictví stáhnout
Mám více zdrojů příjmu stáhnout
Jsem pouze zaměstnanec stáhnout

Jak na uplatnění skutečných výdajů při pronájmu nemovitosti

V případě uplatnění výdajů ve skutečné výši musíte vést záznamy o příjmech a výdajích vynaložených na dosažení, zajištění a udržení příjmů v časovém sledu.

Dále je pak nutné vést evidenci hmotného majetku, který lze odpisovat, evidenci o tvorbě a použití rezervy na opravy hmotného majetku, pokud ji vytváříte, evidenci o pohledávkách a závazcích ve zdaňovacím období, ve kterém dochází k ukončení pronájmu, a mzdové listy, pokud vyplácíte mzdy. Pokud se rozhodnete vést účetnictví, přestože k tomu nemáte podle účetních předpisů povinnost, pak postupujete podle těchto předpisů. Při uplatnění skutečných výdajů můžete paušálně uvést náklady na automobil.

Co jsou skutečné výdaje daňově uznatelné při pronájmu nemovitosti?

Mezi takové výdaje patří ty, které byly opravdu vynaloženy při pronajímání nemovitosti, například:

  • poplatky realitní kanceláři,
  • odpisy nemovitosti,
  • úroky hypotéky na pořízení nemovitosti,
  • náklady na vybavení, jako je například nábytek,
  • náklady na opravu a údržbu,
  • pojištění nemovitosti,
  • daň z nemovitostí,
  • paušál na auto a další.

Při uplatňování skutečných nákladů pamatujte na to, že oprávněnost nákladů musíte být schopni finančnímu úřadu prokázat. A to zpětně až 3 roky, 8 let při vykázání daňové ztráty, po toto období může finanční úřad přijít na kontrolu.

Kdy si můžu paušálně dát do nákladů automobil?

Od základu daně lze mj. odečíst náklady na cesty automobilem vykonané pro dosažení, zajištění a udržení příjmů z pronájmu bytu. Dříve platilo, že náklady lze uplatnit jen podle počtu ujetých kilometrů. Protože cest souvisejících s pronájmem bytu zpravidla moc nebývá, skutečné náklady většinou nemělo smysl řešit. Cestovní výdaje byly ale posléze rozšířeny o výdajový paušál, který dává pronajímatelům zajímavou možnost daňové optimalizace.

Výše paušálního výdaje na dopravu činí 5000 Kč za měsíc a tuto celou částku si můžete odečíst od příjmů z pronájmu každý měsíc, byť jste automobilem ujeli třeba jen několik kilometrů např. kvůli nákupu bytových doplňků nebo kvůli schůzce s nájemníkem. Pokud vozidlo používáte jen zčásti pro záležitosti okolo pronájmu, což bude asi ve většině případů, nemůžete si uplatnit celý paušál, ale jen 80 %, tj. 4000 Kč měsíčně. Pokud tedy provedete jednou měsíčně svým soukromým vozidlem byť jen jediný výjezd související s příjmem z pronájmu, můžete si za rok odečíst z daňového základu 48 000 Kč.

Jsou platby do fondu oprav daňově uznatelné výdaje?

Příspěvky do fondu oprav, které každý měsíc posíláte na účet společenství vlastníků, jsou daňovým výdajem v okamžiku jejich úhrady (pokud nevedete účetnictví).

Týká se to ale jen části příspěvků, které společenství vlastníků použilo na provozní výdaje. Pokud bylo z příspěvků uhrazeno technické zhodnocení, musí na něm pronajímatel vyčíslit svůj podíl a tuto částku si odečte od základu daně. Je proto nutné sledovat, na co společenství vlastníků peníze z fondu oprav vynakládá.

Jak se uplatňují paušální výdaje při pronájmu nemovitosti

Pokud neuplatníte výdaje prokazatelně vynaložené na dosažení, zajištění a udržení příjmů, můžete je uplatnit paušálně, ve výši 30 % z příjmů z pronájmu nemovitosti, nejvýše však do částky 600 tisíc korun.

Pamatujte, že i při využití paušálních výdajů musíte vést evidenci o příjmech a pohledávkách vzniklých v souvislosti s pronájmem. A také že v případě paušálních výdajů už samozřejmě nelze uplatňovat paušální výdaje na dopravu ani platby do fondu oprav.

Příjmy z pronájmu a jaké slevy na dani je možné použít?

Při danění pronájmu můžete samozřejmě uplatnit veškeré slevy na dani, na které máte nárok, například základní daňovou slevu na poplatníka, daňová zvýhodnění na děti, stejně tak i nezdanitelné položky. 

Příjmy z pronájmu, když je nemovitost zapsaná v obchodním majetku

Při pronájmu nemovitosti zapsané v obchodním majetku daníte příjmy jako příjmy z podnikání a jiné samostatné výdělečné činnosti podle § 7 zákona o daních z příjmů. Opět se můžete rozhodnout, zda využijete paušální, nebo skutečné výdaje. Z příjmů z podnikání musíte odvádět sociální a zdravotní pojištění.

Kdy se nemusí příjmy z pronájmu danit?

Příjmy z pronájmu se nemusí danit, jestliže nepřesáhnou:

  • 50 000 Kč za rok, pokud nemáte jiný zdanitelný příjem, 
  • 20 000 Kč za rok, pokud máte ještě zdanitelný příjem ze zaměstnání či samostatné výdělečné činnosti.

TIP: Jak správně danit příjmy z pronájmu majetku firmy

 

Autor článku

Redakce

Redakce  


Pomohl vám tento obsah? Dejte mu hodnocení:

Průměrné hodnocení: 4
Hlasováno: 255 krát

Články ze sekce: DANĚ


'; document.getElementById('preroll_iframe').onload = function(){ preroll_setupIframe(); } } function preroll_setupIframe() { prerollDocument = document.getElementById('preroll_iframe').contentWindow.document; let el = prerollDocument.createElement('style'); el.type = 'text/css'; prerollDocument.head.appendChild(el); el.innerText = "#preroll_adContainer>div:nth-of-type(1),#preroll_adContainer>div:nth-of-type(1) > iframe {width: 99% !important;height: 99% !important;max-width: 100%;}#preroll_videoContent,body{width:100vw;height:100vh}body{font-family:'Helvetica Neue',Arial,sans-serif}#preroll_videoContent{overflow:hidden;background:#000}#preroll_adMuteBtn{width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; preroll_videoContent = prerollDocument.getElementById('preroll_contentElement'); preroll_videoContent.style.display = 'none'; preroll_videoContent.volume = 1; preroll_videoContent.muted = false; const playPromise = preroll_videoContent.play(); if (playPromise !== undefined) { console.log('PREROLL sound forbidden');preroll_videoContent.volume = 0;preroll_videoContent.muted = true;preroll_setUpIMA(false); //playPromise.then(function () { console.log('PREROLL sound allowed');preroll_setUpIMA(true); }).catch(function () { console.log('PREROLL sound forbidden');preroll_videoContent.volume = 0;preroll_videoContent.muted = true;preroll_setUpIMA(false); }); } } function preroll_setUpIMA(sound) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. preroll_createAdDisplayContainer(); // Create ads loader. preroll_adsLoader = new google.ima.AdsLoader(preroll_adDisplayContainer); // Listen and respond to ads loaded and error events. preroll_adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, preroll_onAdsManagerLoaded, false); preroll_adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, preroll_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() { preroll_adsLoader.contentComplete(); }; preroll_videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (sound && preroll_iinfoVastUrlIndex <= preroll_iinfoVastUrls.length-1) { adsRequest.adTagUrl = preroll_iinfoVastUrls[preroll_iinfoVastUrlIndex]; console.log('Preroll advert: ' + preroll_iinfoVastUrls[preroll_iinfoVastUrlIndex]); preroll_current = 0; preroll_videoContent.muted = false; preroll_videoContent.volume = 1; } else { adsRequest.adTagUrl = preroll_iinfoVastUrlsMuted[preroll_iinfoVastUrlIndexMuted]; console.log('Preroll advert: ' + preroll_iinfoVastUrlsMuted[preroll_iinfoVastUrlIndexMuted]); preroll_current = 1; preroll_videoContent.muted = true; preroll_videoContent.volume = 0; } adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; preroll_adsLoader.requestAds(adsRequest); } function preroll_createAdDisplayContainer() { prerollDocument.getElementById('preroll_videoContent').style.display = 'none'; preroll_adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('preroll_adContainer'), preroll_videoContent); } function preroll_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. preroll_adsManager = adsManagerLoadedEvent.getAdsManager(preroll_videoContent, adsRenderingSettings); // Add listeners to the required events. preroll_adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, preroll_onAdError); preroll_adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, preroll_onContentPauseRequested); preroll_adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, preroll_onContentResumeRequested); preroll_adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, preroll_onAdEvent); // Listen to any additional events, if necessary. preroll_adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, preroll_onAdEvent); preroll_adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, preroll_onAdEvent); preroll_adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, preroll_onAdEvent); preroll_playAds(); } function preroll_playAds() { // Initialize the container. Must be done through a user action on mobile // devices. preroll_videoContent.load(); preroll_adDisplayContainer.initialize(); try { preroll_adsManager.init(preroll_width_init, preroll_height_init, google.ima.ViewMode.NORMAL); preroll_adsManager.start(); } catch (adError) { } } function preroll_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('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: prerollDocument.getElementById('preroll_adContainer').style.width = '100%'; prerollDocument.getElementById('preroll_adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('preroll_adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: prerollDocument.getElementById('preroll_adMuteBtn').style.display = 'block'; preroll_init_container.style.display = 'none'; try { adsManager.pause(); } catch (error) { } break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: preroll_play_yt(); break; case google.ima.AdEvent.Type.COMPLETE: preroll_play_yt(); break; } } function preroll_onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); preroll_last_error = adErrorEvent.getError().getErrorCode(); console.log(preroll_last_error); if (!preroll_loadNext()) { preroll_play_yt(); } } function preroll_onContentPauseRequested() { preroll_videoContent.pause(); } function preroll_onContentResumeRequested() { preroll_videoContent.play(); } function preroll_loadNext() { if (preroll_current === 0) { preroll_iinfoVastUrlIndex++; if (preroll_iinfoVastUrls.length > preroll_iinfoVastUrlIndex) { preroll_init(); } else { return false; } } else { preroll_iinfoVastUrlIndexMuted++; if (preroll_iinfoVastUrlsMuted.length > preroll_iinfoVastUrlIndexMuted) { preroll_init(); } else { return false; } } preroll_adVolume = 1; return true; } function preroll_unmuteAdvert() { preroll_adVolume = !preroll_adVolume; if (preroll_adVolume) { preroll_adsManager.setVolume(1); prerollDocument.getElementById('preroll_adMuteBtn').innerHTML = ''; } else { preroll_adsManager.setVolume(0); prerollDocument.getElementById('preroll_adMuteBtn').innerHTML = ''; } } function tryToInicializePreroll() { preroll_init(); } function preroll_play_yt() { preroll_videoElement.style.display = 'block'; const youTubeUrlQueryString = preroll_videoElement.src.includes('?'); const firstLetterOfAddedUrl = youTubeUrlQueryString ? '&' : '?'; preroll_videoElement.src += firstLetterOfAddedUrl + 'autoplay=1&mute=0'; preroll_init_container.style.display = 'none'; document.querySelectorAll('.preroll-container').forEach(e => e.remove()); finance_init_container.style.display = 'block'; try { adsManager.pause(); } catch (error) { } }

'; document.getElementById('outstream-iframe').onload = function(){ setupIframe(); } } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); el.type = 'text/css'; 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 (!outstream_direct_played) { console.log('Setup iframe: direct'); setUpIMA(true); } else if (iinfoOutstreamAllowed) { console.log('Setup iframe: allowed article'); const playPromise = videoContent.play(); playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { renderPassback(); }); } else { console.log('Setup iframe: passback'); renderPassback(); } } /** * 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 = iinfoVastDirect; console.log('Outstream DIRECT CAMPAING advert: ' + iinfoVastDirect); videoContent.muted = true; videoContent.volume = 0; outstream_direct_played = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } /** * 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(1); 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(); try { adsManager.init(outstream_width_init, outstream_height_init, google.ima.ViewMode.NORMAL); adsManager.start(); } catch (adError) { } } /** * 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(); }, 300); // every 300ms } //unmuteAdvert(); outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstream_last_error == 303) { renderPassback(); } 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 (true) { renderPassback(); } break; } } function renderPassback() { console.log('Outstream Spouštím Passback'); advertContainer.innerHTML = ""; advertContainer.appendChild(passBackDiv); } /** * Handles ad errors. * @param {!google.ima.AdErrorEvent} adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstream_last_error = adErrorEvent.getError().getErrorCode(); console.log(outstream_last_error); if (!loadNext()) { renderPassback(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrls.length > iinfoVastUrlIndex) { outstream_init(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { console.log('outstream onActiveView()'); var wrapper = document.getElementsByClassName('outstream-container')[0]; if (wrapper) { var containerOffset = wrapper.getBoundingClientRect(); var windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstream_paused) { adsManager.resume(); outstream_paused = false; /*window.removeEventListener('scroll', onActiveView);*/ console.log('Outstream: ad resume()'); } return true; } else { if (!outstream_paused) { adsManager.pause(); outstream_paused = true; /*window.removeEventListener('scroll', onActiveView);*/ console.log('Outstream: ad pause()'); } } } return false; } let outstream_initialize_interval = setInterval(tryToInicializeOutstream, 100); function tryToInicializeOutstream() { console.log(cpexPackage.adserver.displayed); var wrapper = document.getElementsByClassName('outstream-container')[0]; if (wrapper) { var containerOffset = wrapper.getBoundingClientRect(); var windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstream_initialize_interval); outstream_init(); } } } }
OSZAR »