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

OPINIÃO

Mauro: Felipe Melo pode ser útil ao Fluminense, mas são muitos veteranos

Do UOL, em São Paulo

14/12/2021 11h50

O Fluminense anunciou ontem (13) a chegada do volante Felipe Melo, que deixou o Palmeiras após cinco temporadas, com seu último jogo sendo justamente o da conquista da Libertadores diante do Flamengo, em Montevidéu. Nas Laranjeiras, ele se junta a um elenco que tem outros jogadores experientes, como o centroavante Fred, em uma mescla com garotos revelados na base.

No UOL News Esporte, Mauro Cezar Pereira afirma que Felipe Melo pode ser útil ao Fluminense, destacando principalmente a experiência dele para uma temporada na qual o clube disputará a Copa Libertadores, mas também faz o alerta para a idade e as questões físicas do jogador, além do fato de o clube tricolor ter um número alto de veteranos no seu grupo de atletas.

"Já na Libertadores ele não esteve em condições de jogar a final, às voltas com problemas físicos. É um jogador veterano, eu acho que o Fluminense tem muitos jogadores veteranos, é mais um, acho que ele vai ajudar em alguns momentos, mas não acredito que vá jogar direto todas as partidas", diz Mauro Cezar.

"O Fluminense tenta mesclar os jovens que ele revela com alguns veteranos. Tem que tomar um pouco de cuidado para não ar um pouco do ponto na quantidade de jogadores veteranos, o Fluminense já tem um centroavante que é ídolo do clube, o Fred, intocável, e quando se tem o Fred em campo você tem menos um sem a bola, ele não trabalha sem a bola, é um jogador que não participa do jogo e aí você vai ter um Felipe Melo que se não tiver condições de fazer bem o seu papel, por uma questão física, de idade, de desgaste natural, pode ser um pouco mais complicado", completa.

O jornalista afirma que Felipe Melo pode render se o clube souber uma forma de dosar sua participação em campo para não correr o risco de ficar sem o jogador em jogos mais importantes, além de avaliar como ele chega ao clube após um período lesionado no Palmeiras.

"Tem que ver como ele vai estar, terminou a temporada tentando se recuperar fisicamente no Palmeiras, agora ele tecnicamente pode acrescentar sem dúvida alguma, tem experiência, vai jogar a Libertadores o Fluminense, vai participar da primeira fase inclusive do torneio, é uma contratação que pode ser útil sim ao Fluminense, mas sabendo usar, sabendo que é muito provável que ele não esteja à disposição", conclui.