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

Copa da Liga Inglesa - 2022

West Ham elimina tetracampeão Manchester City em noite perfeita de Areola

Said Benrahma fez o gol que classificou o West Ham e eliminou o Manchester City na Copa da Liga Inglesa - REUTERS
Said Benrahma fez o gol que classificou o West Ham e eliminou o Manchester City na Copa da Liga Inglesa Imagem: REUTERS

Do UOL, em São Paulo

27/10/2021 17h47

West Ham e Manchester City empataram por 0 a 0 no Estádio Olímpico de Londres, hoje. Sem gols no tempo regulamentar, os ingleses decidiram a vaga nas quartas de final na Copa da Liga Inglesa nos pênaltis e os donos da casa carimbaram a classificação para as quartas de final do torneio.

Nas penalidades, os comandados de Guardiola levaram a pior e acabaram eliminados da competição. Phil Foden perdeu a primeira batida e o time de David Moyes mostrou que treino bastante as cobranças, sem desperdiçar nenhuma.

O nome do jogo foi o goleiro francês Alphonse Areola. O arqueiro foi responsável por segurar o forte setor ofensivo do City. No segundo tempo, ele foi muito testado e conseguiu levar o jogo aos pênaltis. Este é o quinto jogo que ele não toma gols.

O Manchester City volta aos gramados no sábado (30), quando enfrenta o Crystal Palace, já o West Ham visitará o Aston Villa no domingo (31). Ambos os jogos são válidos pelo Campeonato Inglês.

Primeiro tempo morno

Os primeiros 45 minutos foram bem mornos no Estádio Olímpico de Londres. Por mais que os comandados de Guardiola tivessem apresentado mais oportunidades de abrir o placar, os donos da casa souberam lidar com a pressão e ainda levaram perigo para o gol de Steffen.

Mas, falando em goleiro, quem precisou trabalhar mesmo foi Areola. O arqueiro do West Ham foi testado pelo forte setor ofensivo do City, mas conseguiu evitar que os visitantes saíssem na frente.

Areola paredão

O goleiro francês Alphonse Aréola foi o destaque da partida na segunda etapa. O arqueiro evitou inúmeras chances do Manchester City em abrir o placar. A insistência do ataque dos comandados de Guardiola fez com que o arqueiro ficasse ligado em todas as chegadas dos visitantes.

City ineficiente

No decorrer do segundo tempo, com dificuldades de fazer o goleiro Areola falhar, Guardiola começou a colocar em campo suas principais peças, como Grealish, Gabriel Jesus e Foden. Mesmo assim não foi o suficiente.

Por mais que o Manchester tivesse mais oportunidades de sair na frente, a dificuldade na última finalização favoreceu o West Ham, que conseguiu levar a partida para os pênaltis.

West Ham com moral

Este é o segundo gigante que o West Ham derruba da competição. Na fase anterior, o time de Londres deixou para trás o Manchester United. Jogando fora de casa, os comandados de David Moyes levaram a melhor por 1 a 0.