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

Rodrigo Coutinho

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Coutinho: Com Abel de novo, Fluminense mostra o que é hoje, e o que quer

Colunista do UOL

17/12/2021 04h00

Abel Braga iniciará no próximo mês a sua quarta agem como treinador do Fluminense. De currículo vitorioso na história do clube, o técnico de 69 anos é uma aposta arriscada da diretoria tricolor. Com exceção do vice-campeão brasileiro Inter em 2020, quando corrigiu a rota no meio do caminho, os outros últimos quatro trabalhos desenvolvidos por ele foram muito decepcionantes.

Estaria a diretoria buscando referências num ado relativamente recente para aplicar no presente? Tem agora um escudo para dividir críticas e responsabilidades? Não é tão difícil entender a escolha de Abel com base no ''modus operandi'' do cartola brasileiro. Aposta em um nome com boa relação com as lideranças do elenco e identificado com o clube.

A torcida, porém, não aceitou tão bem a contratação. Os tricolores se manifestaram de forma contrária nas redes sociais. Sabem que Abel não representa nada muito diferente daquilo que foi o time taticamente com Marcão e Odair Hellmann nas últimas temporadas. Com Odair ainda havia mais elaboração e ideias em fase ofensiva na comparação com o que Abel fez ao longo da carreira.

Isso não quer dizer que o Fluminense não possa ser competitivo e alcançar fases agudas das principais disputas em que estiver envolvido. Aliás, com algumas exceções, isso já aconteceu em 2020 e 2021. O clube se classificou por dois anos seguidos para a Libertadores. Fez frente ao poderoso Flamengo nas finais estaduais, superou rivais mais abastados técnica e financeiramente, e chegou às quartas de final da principal competição sul-americana.

01 - Heber Gomes/AGIF - Heber Gomes/AGIF
Abel Braga ficou apenas cinco jogos no Lugano da Suíça, seu último clube. Saiu em virtude problemas istrativos da equipe
Imagem: Heber Gomes/AGIF

O problema é que a torcida tricolor quer mais do que só ver o seu time jogar fechado e explorando contra-ataques. Quando o rival tem a mesma postura e o Fluminense precisar gerar os espaços, criar contra defesas cerradas, pouca coisa de produtiva tem acontecido. Com a melhora gradativa do elenco à medida que o clube vai se recuperando financeiramente, é de se esperar mais conteúdo ofensivo.

Abel definitivamente não é o cara que vai oferecer isso. Suas equipes, em fase ofensiva, sempre tiveram organizações bem básicas, triviais, sem tanto repertório para gerar espaços. Sem preocupação extensa para movimentos coordenados ou apresentar ocupação de espaços que proporcione uma circulação de bola mais envolvente no campo de ataque.

Quase sempre dependem de erros rivais que geram contra-ataques ou tentam causar desequilíbrio individual. Foi assim até quando conquistou seus títulos importantes. Mas eles já não vêm há quase 10 anos, tempo em que o futebol se transformou bastante em termos de elaboração ofensiva e não permite mais tantas aleatoriedades em quem quer se impor.

Abel Braga novamente no Fluminense é mais um caso da incapacidade dos dirigentes em entender o jogo. Isso não é particularidade do Tricolor carioca. Quase todos os clubes por aqui sofrem neste processo. Enquanto não se capacitarem neste sentido, continuaremos a apresentar menos do que poderíamos dentro de campo. Havia muitas opções mais interessantes no mercado sul-americano e até no Brasil.