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

Mauro Cezar Pereira

OPINIÃO

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

Mauro Cezar: Flamengo e Renato jogam pela sobrevivência e vencem Atlético

Jogadores do Flamengo se abraçam após gol marcado contra o Atlético-MG, que valeu a vitória por 1 a 0 - Thiago Ribeiro/AGIF
Jogadores do Flamengo se abraçam após gol marcado contra o Atlético-MG, que valeu a vitória por 1 a 0 Imagem: Thiago Ribeiro/AGIF

30/10/2021 21h15

Receba os novos posts desta coluna no seu e-mail

Email inválido

Em crise, eliminado da Copa do Brasil e com péssimas partidas recentes, o desfalcadíssimo Flamengo recebeu o Atlético Mineiro completo no Maracanã. Venceu por 1 a 0, gol de Michael, atuando totalmente fora de suas características. Queria vencer, não importava como, conseguiu diante de um adversário que fez uma sofrível apresentação

O Flamengo foi para o intervalo em vantagem no placar, construída na única chance real criada pelo time no primeiro tempo. Willian Arão lançou lá de trás, do campo de defesa, posicionado como se fosse zagueiro. Isla, como sempre projetado no ataque, recebeu livre, ergueu para Bruno Henrique ganhar de cabeça e Michael finalizar para as redes.

No lance, erros seguidos de jogadores do Galo. Keno, que não acompanhou o lateral chileno, Nathan Silva, que perdeu a disputa pelo alto com o atacante rubro-negro, e Guga, que abandonou o veloz ponta flamenguista. Vantagem do mandante em lance isolado. Depois disso, até o fim da etapa inicial, a equipe da casa só se defendeu.

Na estrutura defensiva, Ramon era praticamente um zagueiro mais aberto pela esquerda, Michael fazia o corredor e tinha a aproximação de Bruno Henrique. Uma atuação defensiva muito segura do jovem lateral rubro-negro, especialmente porque Hulk caía mais por aquele setor do campo. E o Atlético, meio desordenado, pressionava na busca do empate.

Faltava ao líder do campeonato mais organização. Muito volume, presença ofensiva, mas tentativas desordenadas que não surtiam efeito. Quanto ao Flamengo, queria emplacar uma jogada de velocidade, um contragolpe, para tal Bruno Henrique estava à frente, próximo a Gabigol, contudo, a esperada bola na medida para a dupla não chegava.

Na volta para o segundo tempo, Cuca sacou o lateral Guga e colocou Diego Costa, que ganhou algumas disputas pelo alto, mas não desequilibrou como se imaginava. Era um Galo sem criatividade, confuso e desarrumado pelas mexidas de seu treinador. Empataria em eventual golpe de sorte, que não apareceu, pois não jogou para tanto.

Do outro lado, Renato Gaúcho retrancava o time para salvar seu emprego, consequentemente mantendo acesa a chama rubro-negra na luta pelo título. Deu certo em jogo fraquíssimo tecnicamente, o que não importava muito para os mais de 24 mil rubro-negros que apoiaram o tempo inteiro. Era vencer ou vencer. Mas ninguém monta elenco de R$ 200 milhões para jogar assim.

Siga Mauro Cezar no Twitter

Siga Mauro Cezar no Instagram

Siga Mauro Cezar no Facebook

Inscreva-se no Canal Mauro Cezar no YouTube