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

Aston Villa goleia novatos e elimina Liverpool da Copa da Liga Inglesa

Andrew Boyers/Reuters
Imagem: Andrew Boyers/Reuters

Do UOL, em São Paulo

17/12/2019 18h35

Enquanto os titulares do Liverpool se concentram na disputa do Mundial de Clubes 2019, diversos novatos menos conhecidos da equipe entraram em campo hoje para duelo das quartas de final da Copa da Liga Inglesa. E, jogando em Birmingham contra o Aston Villa, a equipe visitante não resistiu: perdeu de goleada por 5 a 0 - com quatro gols no primeiro tempo - e deu adeus à competição.

Se você se acostumou com Alisson, Van Dijk, Firmino, Salah e Mané, certamente estranhou a escalação vermelha de hoje: Caoimhin Kelleher; Ki-Jana Hoever, Morgan Boyes, Sepp van den Berg e Tony Gallacher; Pedro Chirivella, Isaac Christie-Davies e Herbie Kane; Luis Longstaff, Thomas Hill (que fez sua estreia profissional) e Harvey Elliott. A equipe formada por atletas sub-19 foi comandada por Neil Critchley, técnico do time sub-23 do Liverpool.

Melhor para o Aston Villa. Com um time tão jovem, o Liverpool acabou sendo presa fácil no Villa Park. Primeiro, aos 14 minutos do primeiro tempo, Conor Hourihane cobrou falta pela direita para a área e fez 1 a 0. A bola ou por todo mundo na área, enganando o goleiro Kelleher.

Três minutos depois, também pela direita, Ahmed El Mohamady foi à linha de fundo e tentou cruzar. No entanto, Morgan Boyes desviou e acabou encobrindo o goleiro, marcando um belo gol contra.

E o Villa conseguiu ampliar ainda no primeiro tempo, aos 36. Depois de bobeada da defesa do Liverpool em disputa no meio-campo, a bola sobrou para Jonathan Kodjia. O camisa 26 disparou em velocidade no contra-ataque, invadiu a área e tocou na saída do goleiro.

Dava tempo de mais um gol antes do intervalo. Aos 45 minutos, após mais uma vacilada da defesa, Jota limpou a marcação no meio e abriu na direita para El Mohamady; o camisa 27 cruzou e Kodjia apareceu junto à marcação para escorar às redes e fazer 4 a 0.

Em sua grande chance para marcar no jogo, aos 9 minutos do segundo tempo, o Liverpool chegou no chute cruzado de Morgan Boyes da entrada da área; Herbie Kane desviou à queima-roupa, mas o goleiro Oerjan Haaskjold Nyland conseguiu espalmar para fora.

Mas os anfitriões, nos acréscimos da etapa final, fizeram 5 a 0: após e em profundidade do egípcio Trezeguet pela esquerda, o brasileiro Wesley (ex-Brugge) entrou na área e tocou cruzado para dar números finais à goleada.

Agora, os torcedores do Liverpool agora ficam de olho na estreia do clube no Mundial, amanhã, contra o Monterrey (México). Na Inglaterra, o próximo compromisso da equipe é no dia 26, fora de casa, contra o Leicester, pela Premier League.