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

Manchester City reage no segundo tempo e vence Porto por 3 a 1

Gündogan comemora o segundo gol do City sobre o Porto - Tim Keeton / POOL/EFE
Gündogan comemora o segundo gol do City sobre o Porto Imagem: Tim Keeton / POOL/EFE

Do UOL, em São Paulo

21/10/2020 18h01

Depois de um início abaixo do esperado, o Manchester City se impôs e conseguiu a vitória por 3 a 1 sobre o Porto, em casa, em confronto válido pela rodada inicial do Grupo C da Liga dos Campeões.

Luis Díaz abriu placar para os portugueses nos primeiros minutos, mas no segundo tempo, a equipe sucumbiu a equipe de Guardiola, e não conseguiu evitar a virada. Agüero, Gündogan e Ferrán Torres, que saiu do banco de reservas para substituir o argentino, marcaram para o time inglês.

Ex-jogador do Fluminense, Evanílson fez sua primeira partida com a camisa do Porto. Substuindo Malang Sarr, o brasileiro entrou em campo no segundo tempo.

Com o resultado, o City lidera o Grupo C com três pontos. O Porto, que na próxima rodada recebe o Olympiacos, é o último colocado. Na próxima rodada, os ingleses enfrentam o Olympique, em Marselha.

Porto sai na frente

Luis Díaz, em um erro de e de Rúben Dias, abriu o placar para os portugueses. Ele carregou da esquerda, driblou dois e bateu cruzado, sem chances para Ederson.

Checagem do VAR

O árbitro de vídeo precisou analisar a jogada. Dentro da área, Gündogan finalizou como pôde depois de conseguir se livrar da marcação. Pepe chegou atrasado e atingiu o corpo de Sterling, que havia ficado com a bola.

Na cobrança, Agüero cobrou firme no canto de direito do goleiro Marchesín, que chegou a tocar na bola.

Walker salva

No fim do primeiro tempo, em um lance de sorte, Marega tentou o e para o meio e a bola resvalou na defesa do City. Walker afastou na raça, de carriho.

Deu trabalho

Marchesín foi exigido logo nos primeiros minutos da segunda etapa. Após cruzamento de Bernardo Silva, Gündogan ficou com a sobra e bateu de primeira para uma grande defesa do goleiro.

Perigo na bola parada

Gündogan já havia levado perigo em cobrança de falta, e foi em uma cobrança primorosa do alemão que o time de Guardiola virou. Com categoria, ele bateu por cima da barreira, no canto direito de Marchesín.

Direto do banco

Ferrán Torres, que substituiu Agüero, tabelou com Foden pela esquerda, deixou Pepe para trás e finalizou no canto direito para sacramentar a vitória do City.

Clima esquenta

Pepe foi advertido com o cartão amarelo após uma entrada dura em Sterling, e os técnicos Pep Guardiola e Sérgio Conceição se estranharam à beira do gramado.

Errata: este conteúdo foi atualizado
Ao contrário do que foi informado Gündogan não é turco, mas sim alemão.