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

Rodolfo Rodrigues

OPINIÃO

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

Rodolfo Rodrigues: Empate por 0 a 0 é bom para Palmeiras e Atlético-MG

Felipe Melo e Hulk disputam a bola durante o jogo entre Palmeiras e Atlético-MG - Conmebol
Felipe Melo e Hulk disputam a bola durante o jogo entre Palmeiras e Atlético-MG Imagem: Conmebol

Colunista do UOL

21/09/2021 23h22

Palmeiras e Atlético-MG empataram por 0 a 0 nesta terça-feira (21), no jogo de ida da semifinal da Copa Libertadores 2021, no Allianz Parque, em São Paulo. Num jogo morno, sem grandes chances claras de gol, o placar acabou sendo bom para os dois times.

O Atlético-MG, que jogou melhor e perdeu um pênalti, poderia ter saído com a vitória, mas voltar para Belo Horizonte precisando de uma vitória simples para avançar à final não é um mau negócio.

Para o Palmeiras, que pouco criou no jogo de hoje e praticamente só se defendeu, o 0 a 0 acabou saindo de bom tamanho, já que o time de Abel Ferreira poderá se garantir novamente na final com um empate com gols no Mineirão, no jogo da próxima terça (28).

Com mais posse de bola (59% a 41%), mais precisão nos es (88% x 78%) e mais finalizações (10 x 4), segundo o SofaScore, o Atlético-MG foi quem mais buscou o gol nesse primeiro jogo da semifinal. Na etapa inicial, o Palmeiras chegou apenas ao gol de Everson num contra-ataque puxado por Rony após um e errado do zagueiro Nathan Silva no campo de ataque. Já o Atlético-MG teve uma boa chance com Guilherme Arana e uma ótima oportunidade para abrir o placar aos 40 minutos, no pênalti de Gustavo Gómez em Diego Costa, Na cobrança, Hulk, que não havia perdido ainda uma penalidade no tempo normal pelo Galo, acabou desperdiçando em sua 7ª cobrança.

Na etapa final, o Atlético-MG perdeu o atacante Diego Costa, por lesão, logo aos 8 minutos, e colocou o rápido Keno aberto pela esquerda. Mas a mudança não surtiu muito efeito. O Galo seguiu controlando as ações, mas sem conseguir criar grandes chances. No Palmeiras, Abel colocou Deyverson e Wesley nos lugares de Luiz Adriano e Dudu, aos 20 minutos, mas as alterações também não mudaram o panorama da partida.

Aos 36 minutos, Hulk levou perigo numa cobrança de falta, mas foi só. Depois de uma grande expectativa, Palmeiras e Galo fizeram um jogo fraco tecnicamente e ficaram no 0 a 0, deixando as emoções para o jogo de volta em Belo Horizonte daqui uma semana. O Galo, que não deverá ter Diego Costa, segue como favorito. Mas o Palmeiras, que não perde há 14 jogos como visitante na LIbertadores (recorde na história da competição) e é o atual campeão, segue bem vivo.

Você pode me encontrar também no twitter (@rodolfo1975) ou no Instagram (futebol_em_numeros)