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

Sem Alisson, Liverpool volta a cair na Champions com falha de goleiro

Adrián falhou com o pé e viu Llorente balançar as redes - Reuters/Carl Recine
Adrián falhou com o pé e viu Llorente balançar as redes Imagem: Reuters/Carl Recine

Do UOL, em São Paulo

11/03/2020 19h53

Substituto de Alisson na meta do Liverpool na tarde de hoje (11), na Liga dos Campeões, Adrián San Miguel foi protagonista de uma falha já na prorrogação da partida contra o Atlético de Madri e virou uma das marcas da queda do atual campeão do torneio.

O espanhol, que defende o time inglês há menos de uma temporada, recebeu um recuo e foi mandar a bola para frente de primeira. A batida, no entanto, saiu rasteira e serviu de bandeja para João Félix. O português encontrou Marcos Llorente, que balançou as redes. Não bastasse o erro com o pé, o goleiro ainda escorregou na hora do chute.

O roteiro desta quarta-feira em Anfield deve ter feito muito torcedor lembrar outra decepção para o Liverpool na Champions, também depois de erros de goleiro. Na decisão da temporada 2017/18, Karius foi responsável por duas falhas clamorosas e virou um dos principais nomes da final vencida pelo Real Madrid, por 3 a 1.

A frustração, inclusive, levou os Reds a irem ao mercado. Foi aí que Alisson foi contratado, como o goleiro mais caro do mundo à época, e dominou a posição. O clube inglês desembolsou cerca de R$ 278 milhões para contar com o brasileiro, titular absoluto tanto no time como na seleção brasileira.

Alisson, porém, não está em condições de jogo. Ele se machucou em um treino antes do jogo contra o Chelsea, no começo de março, como anunciou Jürgen Klopp. A contusão se mostrou mais grave do que a previsão inicial e o brasileiro não pôde atuar hoje. Ele também ficou fora da lista de Tite para os primeiros duelos das Eliminatórias para a Copa do Mundo de 2022.

Agora eliminado da Liga dos Campeões, o Liverpool conta os dias para ser campeão inglês. A equipe tem 25 pontos de vantagem para o Manchester City e deve levantar o título inédito da Premier League nas próximas rodadas.