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

Liga dos Campeões - 2021/2022

City catimba, elimina Atlético de Madri e se classifica para pegar o Real

Manchester City de De Bruyne e cia. precisou da catimba nos acréscimos para eliminar o Atlético de Madri - Jonathan Moscrop/Getty Images
Manchester City de De Bruyne e cia. precisou da catimba nos acréscimos para eliminar o Atlético de Madri Imagem: Jonathan Moscrop/Getty Images

Do UOL, em São Paulo

13/04/2022 18h02

Com catimba e confusão nos acréscimos, o Manchester City segurou empate por 0 a 0 contra o Atlético de Madrid, na tarde de hoje (13), e garantiu a classificação às semifinais da Liga dos Campeões. O time inglês cozinhou a partida o quanto conseguiu, e quando os espanhóis resolveram correr algum risco, já era tarde demais.

Classificado, o Manchester City agora encara o Real Madrid nas semis, o único adversário que o separa do possível retorno à final da Champions após o vice da temporada ada. Antes disso, porém, Guardiola e cia. têm outra semifinal para se preocupar: a da Copa da Inglaterra, em que enfrentam o Liverpool no sábado (16). Já o Atlético de Madri tenta afogar as mágoas contra o Espanyol, pela Liga, no domingo (17).

Atlético não sabe como atacar

Diego Simeone chama Renan Lodi durante jogo entre Atlético de Madri e Manchester City na Liga dos Campeões - Jose Breton/Pics Action/NurPhoto via Getty Images - Jose Breton/Pics Action/NurPhoto via Getty Images
Imagem: Jose Breton/Pics Action/NurPhoto via Getty Images

O time espanhol entrou em campo obrigado a reverter a derrota por 1 a 0 sofrida na Inglaterra, mas não soube muito bem como atacar o City, nem abriu mão de sua linha com cinco na defesa. As intenções foram claramente diferentes em relação ao jogo de ida, como era de se esperar, mas faltou hábito para atacar mais e melhor.

City tem boa chance em confusão

Gundogan tenta cabeceio durante Atlético de Madri x Manchester City na Liga dos Campeões - Chris Brunskill/Fantasista/Getty Images - Chris Brunskill/Fantasista/Getty Images
Imagem: Chris Brunskill/Fantasista/Getty Images

O Atlético só foi tentar chutar a gol aos 34 minutos, quando Kondogbia arriscou de meia distância. A melhor chance do primeiro tempo havia sido do Manchester City, minutos antes, quando Gundogan teve duas chances de abrir o placar mas foi parado pela trave e pelo zagueiro Felipe em uma confusão dentro da área.

Meia hora de futebol um pouco melhor

Ángel Correa domina a bola durante Atlético de Madri x Manchester City pela Liga dos Campeões - David Ramos/Getty Images - David Ramos/Getty Images
Imagem: David Ramos/Getty Images

O Atlético voltou melhor do intervalo, finalmente disposto a se arriscar um pouco mais. Ficou mais com a bola, aproximou-se da área adversária e assim tentou tirar o City da zona de conforto, mas mesmo assim não conseguia ser efetivo. Simeone fez três trocas, jogou o time para frente, e De Paul quase abriu o placar no primeiro minuto em campo.

Guardiola, quem diria, apela a dois volantes

Pep Guardiola comanda o Manchester City em partida contra o Atlético de Madri na Liga dos Campeões - Jonathan Moscrop/Getty Images - Jonathan Moscrop/Getty Images
Imagem: Jonathan Moscrop/Getty Images

O jogo nem apresentava uma pressão mais séria do Atlético de Madri, mas, ainda assim, Pep Guardiola resolveu se resguardar: colocou Fernandinho no lugar de Bernardo Silva para fazer uma dupla de volantes com Rodri. O City ainda segurou a bola um pouco mais, mas viu o adversário crescer meio que no desespero, e por muito pouco Matheus Cunha não fez o gol salvador.

Acréscimos têm catimba, expulsão e gol perdido

Jogadores de Atlético de Madri e Manchester City trocam empurrões em jogo pela Champions - Shaun Botterill/Getty Images - Shaun Botterill/Getty Images
Imagem: Shaun Botterill/Getty Images

A temperatura da partida só baixou quando o Manchester City começou a catimbar: Phil Foden cavou a expulsão de Felipe em uma confusão que durou três minutos; depois Fernandinho valorizou outra falta no meio-campo que Mahrez demorou toda a vida para cobrar. Lançado ao ataque, o Atlético deu espaços para o City contra-atacar pela primeira vez aos 95 minutos, mas Gundogan perdeu um gol feito na frente de Oblak. Na última bola do jogo, Ederson espalmou um chute à queima-roupa de Correa e garantiu a classificação.