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

Apesar de poucas chances, Ganso volta a corresponder e dá mais opção no Flu

Ganso voltou a jogar bem, apesar das poucas chances, e dá opções ao treinador Odair Hellmann - Lucas Mercon/Fluminense FC
Ganso voltou a jogar bem, apesar das poucas chances, e dá opções ao treinador Odair Hellmann Imagem: Lucas Mercon/Fluminense FC

Caio Blois

Do UOL, no Rio de Janeiro

27/10/2020 04h00

A vitória do Fluminense sobre o Santos trouxe ótimas notícias ao torcedor tricolor. Uma delas foi mais uma boa atuação do meia Paulo Henrique Ganso que, se não é titular ou primeira opção do treinador Odair Hellmann, voltou a corresponder em campo, e cria alternativas para a equipe que agora figura no G-4 do Campeonato Brasileiro.

A saída de Nenê, que em raro momento na carreira sentiu dores musculares, nos minuetos finais do primeiro tempo, parecia ser a senha para a entrada do camisa 10 na equipe, reserva natural do artilheiro do Flu no ano.

Odair, entretanto, optou por Marcos Paulo. A opção se mostrou acertada: atuando solto entre as linhas, ora como meia ora como segundo atacante, o jovem de 19 anos, enfim, voltou a jogar bem e a balançar as redes após sete meses — com assistência de Paulo Henrique Ganso, que havia entrado no lugar de Caio Paulista, na etapa complementar.

"O atacante tem esse timing da necessidade do gol dentro do processo de confiança. Marcos Paulo não é diferente. É um jovem promissor, excelente menino, excepcional jogador. Há uma disputa benéfica ao grupo e talvez na função de lado de campo seja onde temos mais opções com características diferentes. E tenho usado esses jogadores em momentos diferentes. Marcos Paulo está dentro desse processo. Fico feliz que tenha feito o gol para confiança dele. Que bom que foi nesse momento importante do jogo", destacou.

Marcos Paulo abraça Ganso após gol do Fluminense; dupla voltou a jogar bem - MARCELO GONCALVES/ESTADÃO CONTEÚDO - MARCELO GONCALVES/ESTADÃO CONTEÚDO
Marcos Paulo abraça Ganso após gol do Fluminense; dupla voltou a jogar bem
Imagem: MARCELO GONCALVES/ESTADÃO CONTEÚDO

O entrosamento com o camisa 11, inclusive, é outro ponto positivo. Com os dois jogadores, o Flu criou muitas chances e foi superior ao forte time do Santos.

Contra o Fortaleza, sábado (31), na Arena Castelão, já sem os suspensos Dodi e Fred, e talvez também com o desfalque de Nenê, o treinador precisará mexer no time. E a atuação de Ganso mostrou que o jogador pode atuar também mais recuado.

Em uma nova formatação de meio de campo nas últimas partidas, Hellmann tem utilizado Hudson mais avançado que a dupla de meio-campistas, como uma "isca" para atrair marcadores e abrir espaços para os avanços do setor de criação.

Além da qualidade no e, o camisa 10 também vem tendo bons números em recuperação de bolas. Assim, Ganso dá opções a Odair, e sua utilização pode crescer nos próximos jogos, ainda que a maratona de partidas tenha reduzido. Com mais tempo para treinar, o Flu tem tido mais variações e mostrado um repertório maior nas últimas partidas, o que justifica, também, a série invicta de sete jogos — maior desde 2013.

Com 29 pontos, o Fluminense é o quarto colocado do Campeonato Brasileiro. No sábado (31), o Tricolor enfrenta o Fortaleza, na Arena Castelão, às 21h. O primeiro turno de 2020, sob o comando de Odair Hellmann, já é o melhor desde 2015, quando o Flu ocupou a mesma posição atual na tabela, mas encerrou as 19 rodadas com 33 pontos.

Fluminense