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

Santos acaba com pesadelo do Flamengo e resolve problema no gol

Goleiro Santos, do Flamengo, durante a final da Libertadores - Gerardo MENOSCAL / AFP
Goleiro Santos, do Flamengo, durante a final da Libertadores Imagem: Gerardo MENOSCAL / AFP
Bruno Braz, Alexandre Araújo e Luiza Sá

Do UOL, no Rio de Janeiro

29/10/2022 19h03

O Flamengo exorcizou de vez um fantasma que ainda assombrava os torcedores. Com o título da Libertadores em cima do Athletico Paranaense hoje (29), com a vitória por 1 a 0, e um ano de gala de Santos, os traumas de 2017 ficam para trás com as taças do torneio continental e da Copa do Brasil.

Mesmo com o 2019 mágico e Diego Alves brilhando, as derrotas para Independiente, da Argentina, e Cruzeiro machucaram o rubro-negro dois anos antes. Na época, o experiente goleiro, contratado após 10 anos no futebol espanhol, não pôde ser inscrito e também se lesionou. Assim, Thiago e Muralha acabaram sendo os vilões.

Contratado em abril deste ano, Santos custou cerca de 3 milhões de euros (aproximadamente R$ 15,5 milhões, segundo a cotação da época) após deixar justamente o Athletico-PR, onde foi formado e era titular desde 2018.

Falando em titularidade, Santos só perdeu dois dos últimos 35 jogos do Flamengo na temporada, atuando mesmo quando o time era todo reserva no Brasileiro. Quando foi contratado, ainda com Paulo Sousa no comando do time, chegava a revezar com Hugo Souza, mas tudo mudou com Dorival Jr.

Agora Santos coloca no próprio currículo o troféu mais importante do continente. Ele soma a Libertadores a duas Copas Sul-Americanas, duas Copas do Brasil e três Estaduais. Pela Seleção Brasileira, foi campeão dos Jogos Olímpicos de 2021.

Traumas ados

Em 2017, Reinaldo Rueda não conseguiu contar com Thiago no segundo jogo da final da Copa do Brasil contra o Cruzeiro por uma fratura no punho esquerdo. Desta forma, Alex Muralha acabou sendo a cara daquele fracasso nos pênaltis. Mas o garoto, que era cria do Ninho do Urubu, falhou na ida. A situação era tão complexa que César, na época quarta opção, foi testado na Sul-Americana, quando o Flamengo perdeu na Argentina e ficou no empate no Maracanã.

Em 2020, outra eliminação doída para o Flamengo foi nas quartas de final da Copa do Brasil. Ainda no jogo de ida, em saída de bola do Rubro-Negro desde a defesa, Hugo Souza recebeu dentro da pequena área, foi tentar driblar Brenner, mas acabou desarmado pelo atacante, que mandou a bola para o fundo das redes. O São Paulo venceu por 2 a 1 no Maracanã e 3 a 0 no Morumbi.

Disputa interna

Uma das grandes estrelas do Flamengo em 2019, Diego Alves viveu desde então uma instabilidade na carreira. Em 2020, ou de 62 para 29 jogos disputados. Em 2021, chegou a ser titular na final da Libertadores contra o Palmeiras e voltou a ser bem utilizado, com 49 partidas. Mas neste ano só entrou em campo sete vezes.

Já Hugo Souza, que apareceu bem em 2020 mesmo com a falha, oscilou. Naquele ano, fez 27 jogos, enquanto em 2021 caiu para 13. Em 2022, já soma 27 partidas, jogando boa parte das vezes que Dorival poupou o "time das Copas".

Flamengo