;(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

Daniel Furlan já brigou com colegas do Choque de Cultura: 'Rola desgaste'

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

27/06/2023 13h20

Daniel Furlan fez muito sucesso como o Renan, do 'Choque de Cultura'. Durante participação no Otalab, programa do Canal UOL comandado por Otaviano Costa, o humorista contou os bastidores do programa e disse que nem sempre havia plena harmonia entre os membros do grupo que reúne "grandes nomes do transporte alternativo" falando sobre cinema com muito humor.

A gente já teve discussões. A gente fecha o texto junto. Normalmente, a gente faz um grande brainstorm com todo mundo. Aí um fica com a redação final. Depois essa redação final é colocada na mesa. E todo mundo fala que aquilo está uma b****, aquela coisa, né? Até que todo mundo junto fecha o que é fechado. Mas a gente já brigou várias vezes. Eu acho que essa coisa de você trabalhar com pessoas do seu convívio social é f***. Porque você trabalha, as horas são muitas, rola desgaste e, quando você vai se divertir, é a mesma pessoa" - disse Daniel Furlan no Otalab

Daniel Furlan sobre estreia do Choque de Cultura: 'Público estranhou muito'

Segundo Daniel Furlan, o 'Choque de Cultura', que começou no site Omelete e chegou até a TV Globo, nem sempre foi bem recebido pelo público.

Estranharam muito. Estreou no Omelete. Não tinha nada a ver com a linha editorial do Omelete. No começo, era um festival 'de 'que p**** é essa?'. Pessoal detonando. E, depois, ficou legal. Mas eu acho que gostava mais desse meu eu antigo. Eu fiquei mais sensível. E ser bonito é muito difícil. A gente sofre" - destacou Daniel Furlan no Otalab

Daniel Furlan expõe bastidores do fim da MTV: 'Desespero permanente'

Daniel Furlan ou pela MTV em um período em que a emissora já estava prestes a fechar as portas. Segundo ele, foi difícil trabalhar em um ambiente com tantas incertezas.

Era um desespero permanente. Porque a gente sabia que ia acabar, mas não sabia quando. Como eu tinha acabado de chegar, e era meu primeiro trabalho na TV, queria fazer valer a pena. Então, era aquela coisa de produzir muito e muito rápido" - contou Daniel Furlan no Otalab

Daniel Furlan: 'Coisas que eu fazia piada há 15 anos perderam a graça'

Ao falar sobre os limites do humor, Daniel Furlan itiu que se transformou ao longo do tempo e destacou que muito do que era considerado engraçado no ado, hoje, não vale uma piada.

O que eu falaria, se pudesse falar de tudo? Tem muitas coisas que eu fazia piada há 15 anos, que hoje não é mais engraçado. Ficou meio baixo astral. Perdeu a graça" - avaliou Daniel Furlan no Otalab

Daniel Furlan ironiza família Bolsonaro e OnlyFans: 'Não estão longe disso'

Quem Daniel Furlan gostaria de ver no OnlyFans? Em tom irônico, o humorista diz que não estranharia se visse por lá o ex-presidente Jair Bolsonaro e a ex-primeira-dama, Michelle.

Eu escrevia, fazia no Instagram, fazia umas fotos, 'a vida sexual de Jair Bolsonaro e Michelle Bolsonaro'. Mais em uma intenção de terror do que de erótico. Será que poderia ter um OnlyFans? Não estão muito longe disso, talvez. Michelle está nessa coisa de skincare, ando uns cremes na cara do Bolsonaro. E ele está apodrecendo. Bem perturbador" - disparou Daniel Furlan no Otalab

Veja a íntegra do programa: