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

Flamengo

Ceni se assustou com duas questões ao assumir Fla. Agora quer levantar time

Vitinho lamenta chance perdida na eliminação do Flamengo na Libertadores 2020 - Antonio Lacerda/Pool/AFP
Vitinho lamenta chance perdida na eliminação do Flamengo na Libertadores 2020 Imagem: Antonio Lacerda/Pool/AFP

Leo Burlá, Pedro Ivo Almeida e Thiago Fernandes

Do UOL, no Rio de Janeiro e em São Paulo

03/12/2020 04h00

Rogério Ceni encontrou um Flamengo diferente do que imaginava. Comandado por Domènec Torrent até meados de novembro, o elenco apresentou dois problemas que surpreenderam o treinador em sua chegada: condições físicas abaixo do considerado ideal e um emocional abalado. O ex-goleiro não fala sobre o assunto, mas o UOL Esporte apurou qual foi o cenário que o assustou em sua chegada.

O ex-comandante do Fortaleza se entende muito bem com os novos comandados — e a recíproca é verdadeira. Entretanto, ele detectou problemas físicos no plantel tão logo chegou. O excesso de lesões é citado internamente como um empecilho para o desenvolvimento do trabalho da nova comissão técnica. Coincidentemente, Dome sempre externou que o desequilíbrio físico do grupo era a causa do mau rendimento.

Para Ceni, a questão ainda teve um agravante mais preocupante: a partir dos dados de GPS, ele detectou que a intensidade dos treinos com o antecessor estava muito baixa, o que favorecia as lesões. Ele subiu a pegada das atividades em níveis até acima do implantado por Jorge Jesus.

"Sou muito feliz por trabalhar como um grupo como esse. Hoje (terça) faz 21 dias que estou aqui, sei o que trabalhei tentando fazer, pensar e realizar treinos para esse time melhorar cada vez mais. Só tenho coisas boas a falar desses atletas, mas não tenho como controlar o resultado", disse o técnico.

A preparação dos jogadores e a recuperação de lesões têm colocado em xeque os profissionais do departamento médico. Chefe do setor, Márcio Tannure encara uma resistência que a bem longe dos elogios recebidos em 2019. Em direção oposta a de Marcos Braz, vice de futebol, Tannure assumiu o ônus pela mudança de muitos profissionais que ficam sob sua tutela e tem sofrido intensa pressão. Na Gávea, há quem defenda sua saída.

Uma recente entrevista coletiva não ajudou em nada a situação do profissional. Evasivo e tenso, ele não conseguiu esclarecer as dúvidas sobre as constantes contusões e ficou ainda mais acuado. Para piorar sua situação, Gabigol teve desequilíbrio muscular detectado logo depois. Fora do jogo contra o Racing (ARG), o artilheiro fez falta e viu a eliminação do sofá de casa.

Há também o temor de problemas emocionais dos jogadores. As cobranças por resultados melhores após a última temporada, quando o time venceu o Brasileirão e a Libertadores, aumentam a pressão sobre os atletas no Ninho do Urubu, que sentiram o baque pela desclassificação.

A figura do psicólogo não é bem vista pela atual cúpula de futebol, que afastou o profissional Alberto Filgueiras em março de 2019. Sempre que questionado sobre o tema, Braz diz que o Rubro-Negro foi campeão de tudo sem ter esse tipo de amparo.

Fora de dois torneios, os rubro-negros só têm o Brasileirão como tábua de salvação até o fim da temporada. O novo tropeço irá aumentar a temperatura na Gávea e a pressão irá crescer. Com o departamento de futebol em xeque, os próximos dias serão de turbulência e discussões sobre o futuro. Agora, a equipe junta os cacos para enfrentar o Botafogo, sábado (5), às 17h, no Nilton Santos.

Flamengo