;(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 - 2020/2021

Com golaço de De Bruyne, City bate M'gladbach e vai às quartas da Champions

Kevin De Bruyne e Phil Foden celebram o primeiro gol do City - CLIVE BRUNSKILL/AFP
Kevin De Bruyne e Phil Foden celebram o primeiro gol do City Imagem: CLIVE BRUNSKILL/AFP

Do UOL, em São Paulo

16/03/2021 18h51

O Manchester City confirmou seu favoritismo diante do Borussia M'gladbach e se classificou para as quartas de final da Liga dos Campeões. O time comandado pelo técnico Pep Guardiola avançou após vencer os alemães por 2 a 0 na tarde de hoje, na Puskás Arena, em Budapeste, na Hungria. Os gols foram marcados por Kevin De Bruyne, que acertou um lindo chute de fora da área, e Gündogan.

A equipe inglesa tinha a vantagem depois de ter vencido por 2 a 0 no confronto de ida.

Mesmo sem um atacante de ofício em campo - o brasileiro Gabriel Jesus permaneceu no banco de reservas - os ingleses começaram pressionando. Aos 12 minutos Kevin De Bruyne abriu o placar com uma pintura. Mahrez ajeitou e ou para o belga, que bateu com força, sem chances para o goleiro Sommer. A bola ainda bateu no travessão antes de entrar.

Logo em seguida, aos 18, foi a vez de Gündogan ampliar. Foden disparou em velocidade e enfiou a bola para o camisa 8, que só teve o trabalho de dominar e tirar o goleiro para fazer 2 a 0.

No ataque contra defesa, a posse de bola era quase toda do City, enquanto os alemães se seguravam como podiam. Em uma das poucas chegadas, Zakaria bateu colocado após ar por Walker, mas Ederson defendeu sem dificuldades.

Superior durante todo o confronto, o City voltou para a segunda etapa gastanto tempo e visivelmente poupando seus jogadores, visando os próximos confrontos da temporada. Mahrez teve ainda uma boa chance de ampliar após receber e de Foden, mas Sommer espalmou.

O time se junta a Real Madrid, Borussia Dortmund, Porto, Liverpool e PSG no grupo dos classificados para as quartas de final da Liga dos Campeões. Na sexta-feira, a UEFA sorteará os confrontos da próxima fase.

O City volta a campo no sábado (20), contra o Everton, nas quartas de final da Copa da Inglaterra, às 14h30 (horário de Brasília).

Já o M'gladbach amagou a sétima derrota seguida. O time também vive uma fase ruim no Campeonato Alemão, onde ocupa a 10ª colocação. O próximo desafio é contra o Schakle 04, lanterna da competição, também no sábado (20), às 14h30.