;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Felipe Titto: de 'Malhação' a apresentador de reality e milionário

Colaboração para Splash, em São Paulo

06/05/2021 04h00

Aos 34 anos, Felipe Titto é um homem de várias facetas. Como ator, o paulistano ganhou os holofotes ao atuar em "Malhação", em 2005. Daí para os reality shows, foi um pulo: ele ou por "Are You the One? Brasil" e "Ridículos", na MTV, e pelo "Soltos em Floripa", no Amazon Prime. A carreira de empresário também deslanchou. Ele diz ter conseguido o primeiro milhão aos 28 anos e atualmente é sócio de 10 empresas. Titto vai falar sobre isso e muito mais no "OtaLab" no UOL de hoje, ao vivo, a partir das 19h (de Brasília).

Felipe Titto - Reprodução/Instagram/@felipetitto - Reprodução/Instagram/@felipetitto
Felipe Titto
Imagem: Reprodução/Instagram/@felipetitto

Sondado para 'A Fazenda'

Sondado para substituir Marcos Mion no comando do reality "A Fazenda" na Record TV em 2021, Felipe tem tudo para se tornar um dos principais apresentadores do país caso a empreitada dê certo. Será que vem novidade por aí?

Felipe Titto - AGNEWS - AGNEWS
Felipe Titto
Imagem: AGNEWS

Séries e novelas

Após fazer sua estreia na TV com uma participação na série "A Diarista", em 2004, Titto ficou conhecido do público ao interpretar o personagem Marley em "Malhação" no ano seguinte. Em 2012 ele participou da novela "Avenida Brasil", integrou o elenco de "Amor à Vida" em 2013 e fez uma participação em "A Regra do Jogo" em 2015. No mesmo ano integrou novamente o elenco de "Malhação", participando da temporada "Seu Lugar no Mundo" na pele do vilão Samurai.

Felipe Titto - Victor Pollak/TV Globo - Victor Pollak/TV Globo
Felipe Titto
Imagem: Victor Pollak/TV Globo

Não perca

Quer saber mais sobre a carreira e a vida de Felipe Titto? Não perca o "OtaLab" no UOL ao vivo a partir das 19h (de Brasília)!