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

Alicia Klein

OPINIÃO

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

Flamengo amassou o Fluminense, fez seu melhor 1o tempo e não mereceu vencer

Ganso tenta se livrar da marcação em Fluminense x Flamengo, duelo da Copa do Brasil - FELIPE DUEST/PERA PHOTO PRESS/ESTADÃO CONTEÚDO
Ganso tenta se livrar da marcação em Fluminense x Flamengo, duelo da Copa do Brasil Imagem: FELIPE DUEST/PERA PHOTO PRESS/ESTADÃO CONTEÚDO

17/05/2023 11h01

Receba os novos posts desta coluna no seu e-mail

Email inválido

O Flamengo conseguiu a proeza de amassar o Fluminense no primeiro tempo, jogar todo o segundo com um a mais e sair de campo derrotado por um melancólico 0 a 0.

O Tricolor não frequentou o campo de ataque na etapa inicial. Ficou encaixotado pela marcação alta do Rubro-negro e sofreu um bombardeio. Impressionante e inócuo. Quatrocentas oportunidades criadas, duzentas finalizações e nada.

A expulsão de Felipe Melo parecia ser a pá de cal, a abertura dos portões do inferno, a chave para a goleada.

Assim como aconteceu contra o Bahia, porém, o Flamengo fez um segundo tempo pior e pareceu sofrer com a superioridade numérica.

Diniz organizou o time para segurar o empate, contando com uma excelente partida de Paulo Henrique Ganso, que mostrou muito talento, mesmo sem a bola. Por pouco, não arrancou uma vitória no contra-ataque.

Tudo bem, a equipe de Sampaoli estava desfalcada e sentiu demais a ausência de Pedro. Mas do outro lado a situação era pior. No banco, oito crias de Xerém, o mais experiente deles o garoto John Kennedy, de 20 anos.

Embora a celebração final e o empate com um a menos possam ar a ideia de que o Fluminense foi heróico, urge notar que o time teve uma de suas piores apresentações do ano na primeira etapa. O Dinizismo foi completamente anulado e de nada adiantou a posse de bola ou os diversos es trocados no campo de defesa.

E, todavia contudo entretanto, quem saiu por baixo foi o Flamengo, que talvez tenha feito a sua melhor apresentação do ano antes do intervalo.

Nunca gostei do conceito de "o time x mereceu vencer". Futebol não é sobre merecimento, não é subjetivo. Se você finaliza 19 vezes, mete duas bolas na trave, consegue oito escanteios, termina com 54% de posse de bola e 11 contra 10, e não é capaz de fazer um único gol, desculpe, gente boa, mas você não mereceu ganhar.

O Fluminense, por outro lado, não mereceu perder e não perdeu. Diante da impossibilidade de criar — primeiro pela competência tática rubro-negra e depois pela incompetência de Felipe Melo —, resistiu com bravura e elegância: a equipe cometeu apenas cinco faltas no jogo inteiro. (Na minha modesta opinião foi também prejudicado pela arbitragem, que poderia facilmente ter expulsado Gabigol.)

Como um dia profetizou a presidente Dilma Roussef: "Não acho que quem ganhar ou quem perder, nem quem ganhar nem perder, vai ganhar ou perder. Vai todo mundo perder."

Menos quem gosta de futebol. Aí ninguém ganhou nem perdeu, mas todo mundo ganhou.

Siga Alicia Klein no Instagram e no Twitter

Leia todas as colunas da Alicia aqui