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

Fred vive expectativa por retorno, e atravessa momento diferente no Flu

Fred, atacante do Fluminense - Mailson Santana/Fluminense FC
Fred, atacante do Fluminense Imagem: Mailson Santana/Fluminense FC

Do UOL, no Rio de Janeiro (RJ)

26/03/2022 04h00

Recuperado de lesão muscular na coxa direita, o atacante Fred vive a expectativa de voltar a ser relacionado pelo Fluminense, para o segundo jogo da semifinal do Campeonato Carioca. Ao mesmo tempo que o retorno pode acontecer justamente contra o Botafogo, uma das maiores vítimas, o camisa 9 a por um momento distinto em sua relação com o Tricolor. O jogo de volta que definirá o adversário do Flamengo no Estadual acontece amanhã (27), às 16h, no Maracanã.

Ídolo do clube, e um dos mais experientes do elenco, ele está afastado desde o fim do mês ado, no primeiro jogo contra o Millonarios, da Colômbia, pela Pré-Libertadores, quando sentiu o problema muscular. Neste período, porém, viu Germán Cano ganhar espaço, fazer gols e cair nas graças da torcida.

Um dos grandes nomes da história do Fluminense, Fred, talvez, pela primeira vez, tenha de brigar por espaço no time titular. Ele, inclusive, na atual temporada, atuou em seis partidas até aqui e ainda busca desencantar.

A volta do atacante, que é identificado com a torcida, pode acontecer também em um momento meio conturbado, em que há uma tentativa de retomar a boa relação entre campo e arquibancada. Após um bom início de ano, a venda dos direitos econômicos do jovem atacante Luiz Henrique ao Betis, da Espanha, e a eliminação na fase preliminar na Libertadores fizeram a harmonia ir água abaixo.

O futuro de Fred ainda é uma incógnita. O contrato vai até julho e, em oportunidades anteriores, ele citou aposentadoria, mas estender o vínculo não é uma possibilidade totalmente descartada. O assunto já foi até mencionado pelo presidente Mario Bittencourt, que apontou a vontade da diretoria e do técnico Abel Braga pela renovação do contrato do ídolo.

"O Fred tem contrato até o meio do ano, termina em 21 de julho, e temos um combinado que é, quando for chegando perto, dependendo das competições que estivermos disputando, de como vamos estar posicionados, dependendo de como ele vai estar se sentindo, irmos estendendo esse contrato até o final do ano. Acho, sinceramente, que vamos estender diretamente até o final do ano. É um desejo do treinador, que já me perguntou algumas vezes sobre isso. Não quero antecipar porque futebol é dinâmico. O que diz o contrato é que acaba em julho, o meu coração de torcedor quer que vá até dezembro, e acho que o dele também", disse o mandatário, em entrevista em janeiro.

Fluminense