;(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
Logo Pagbenk Seu dinheiro rende mais
Topo

Flavio Gomes estreia newsletter no UOL com crônicas e análises sobre a F1

Do UOL, em São Paulo

13/02/2022 14h00

O UOL que gosta de automobilismo, futebol e de histórias bem contadas tem uma nova opção de newsletter a partir deste domingo (6). Flavio Gomes reforça o time de colunistas do UOL Esporte e á um boletim semanal.

Especialista na cobertura de Fórmula 1 e torcedor fanático da Portuguesa, Flavio reúne agens por diversos veículos de imprensa, entre eles Folha de S.Paulo, Placar, Quatro Rodas, ESPN, Lance!, Jovem Pan e Grande Prêmio. Justamente por já ter atuado em jornal, revista, rádio, televisão e internet, ele brinca ser "um multimídia de araque. Porque no fundo eu faço a mesma coisa em todo lugar: falo e escrevo".

Flavio Gomes - Arquivo Pessoal - Arquivo Pessoal
Imagem: Arquivo Pessoal
Flavio Gomes fará comentários sobre os GPs de Fórmula 1 e outras competições de automobilismo, bem como trará crônicas sobre temas diversos, contará bastidores de sua carreira jornalística e ainda dará dicas de leitura, áudio e vídeo, exclusivas para s.

"Flávio Gomes é provavelmente o mais importante jornalista de automobilismo do país. E escreve bem demais. Quem gosta de F1 tem tudo pra adorar essa newsletter", opina Murilo Garavello, diretor de conteúdo do UOL.

Outros lançamentos

O boletim semanal de Flavio Gomes faz parte de uma série de lançamentos do UOL neste mês de fevereiro. Os fãs de Esporte também verão nesta semana as estreias da newsletter "Olhar Olímpico", um boletim semanal com a preparação dos atletas para as grandes competições mundiais e para a Olimpíada de Paris-2024, e a newsletter de José Trajano, que estreia entre os colunistas do UOL com crônicas e comentários sobre futebol, política, cultura e outros temas.

Ainda em fevereiro, o UOL lança newsletters de outros jornalistas renomados - Maurício Stycer, Daniela Pinheiro e Thaís Oyama -, além de um boletim temático sobre eventos extremos da natureza - "Crise Climática" -, uma análise semanal qualitativa e quantitativa sobre empresas de destaque do mercado de ações —"A Companhia" —e uma agenda especial aos domingos com os eventos da semana seguinte —"Pra Começar a Semana".