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

Fluminense

Bom início com desfalques tira pressão para mudanças de Odair no Flu

Mesmo desfalcado, Fluminense venceu seus dois jogos e está 100% no Campeonato Carioca - Thiago Ribeiro/AGIF
Mesmo desfalcado, Fluminense venceu seus dois jogos e está 100% no Campeonato Carioca Imagem: Thiago Ribeiro/AGIF

Caio Blois

Do UOL, no Rio de Janeiro (RJ)

24/01/2020 04h00

Dois jogos, duas vitórias. Três gols a favor e nenhum contra. O Fluminense de Odair Hellmann começou o Campeonato Carioca com o pé direito, apesar de ter mais que um time inteiro de desfalques no início de 2020. Entre lesionados, poupados, não-regularizados e até cedidos à seleção, foram 15 desfalques na vitória contra a Portuguesa. E o bom início permite ao novo treinador tranquilidade para fazer mudanças na equipe para 2020.

Do elenco ao estilo de jogo, o Tricolor é bem diferente da última temporada. Apesar de ter atuado em apenas dois jogos e sem Muriel, o time já apresenta mudanças táticas: Nino, Digão, Frazan, Mascarenhas, Egídio, Yuri, Henrique, Ganso, Yago Felipe, Michel Araújo, Pacheco, Evanílson, Marcos Paulo e Caio Paulista.

Com a postura mais equilibrada e com mais compactação entre as linhas, a equipe venceu seus jogos, mas ainda sofre um pouco com a lentidão e a falta de ritmo. Tudo bem longe da "cara" que Odair quer dar ao Flu, mas com a sensação de que a pressão para as mudanças será bem menor.

"Nós sentimos o ritmo, jogadores adversários pareciam mais ágeis. Estamos construindo uma equipe, perdemos muitos jogadores do ano ado para cá. Muitos jogadores ainda não puderam estrear. Vão acontecer muitas coisas ainda. Seja no aspecto tático ou técnico. Tem dez ou 11 jogadores que vão encorpar, mas conseguimos oportunizar outros jogadores. Tem muito caminho pela frente ainda. Mesmo ando por esse processo, estamos vencendo. Isso gera confiança", declarou, na coletiva após a vitória.

Avesso aos rótulos, Hellmann quer fazer do Fluminense uma equipe mais competitiva em 2020, após um ano frustrante. Apesar de ser muitas vezes chamado de retranqueiro, tem mantido o estilo de troca de es desde o campo defensivo, marca do Tricolor em 2019.

As transições, ainda lentas, se devem em grande parte ao uso de reservas. Ainda assim, serão um desafio para o treinador, que conta com volantes pouco ágeis, à exceção de Dodi, projetado como reserva. Odair também deve demorar a ter todas as opções de velocidade à disposição: Caio Paulista ainda está no departamento médico, e Fernando Pacheco só chega ao Flu após representar o Peru no Pré-Olímpico, que se encerra em fevereiro.

As peças formam outro quebra-cabeça para Odair Hellmann, que ainda não deu indicações de qual será seu time-base para a temporada. O bom início de Nenê e a ascensão de Miguel tendem a colocar mais dúvidas na cabeça do técnico, que já deve ter a maioria dos reforços à disposição para o jogo de domingo, às 16h, contra o Bangu, em Moça Bonita.

"Egídio, Yago, Digão, Henrique, todos liberados para o próximo jogo. Tem o caso do Matheus Ferraz, que fez dois jogos inteiros... Tudo isso, vou visualizar, mas sempre pensando em colocar a melhor equipe para responder melhor em todos os aspectos. Futebol se corrige ganhando. Vamos corrigir, temos a evoluir aspectos táticos, físicos. Agora, teremos jogadores liberados para encorpar. Em um contexto geral, merecemos a vitória. Soubemos ar por dificuldades, isso é aprendizado. Placar poderia ser mais elástico", declarou.

Fluminense