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

Benzema faz 2, Real bate M'gladbach e garante classificação na Champions

Benzema comemora gol do Real Madrid contra o Borussia Moenchengladbach, pela Liga dos Campeões - Getty Images
Benzema comemora gol do Real Madrid contra o Borussia Moenchengladbach, pela Liga dos Campeões Imagem: Getty Images

Colaboração para o UOL, em São Paulo

09/12/2020 18h49

O Real Madrid entrou em campo pressionado, mas tratou de espantar qualquer possibilidade de problema na Liga dos Campeões. O time merengue venceu o Borussia Monchengladbach por 2 a 0 na tarde de hoje, no estádio Alfredo Di Stéfano, e assegurou vaga no mata-mata da competição. Benzema anotou os dois gols da vitória.

A missão do Real era uma só: vencer para não ter que depender de mais nenhum resultado para seguir na disputa. E a equipe encaminhou o triunfo cedo. Aos oito minutos, Benzema já havia colocado os merengues em vantagem após completar de cabeça um cruzamento de Lucas Vázquez. Aos 31, novamente o francês apareceu para dar ainda mais tranquilidade ao time e ampliou.

Com o resultado, o Real ficou com a liderança do Grupo B, com dez pontos. O Monchengladbach, com oito, ficou em segundo.

Os confrontos das oitavas de final serão definidos em sorteio realizado pela Uefa na próxima segunda-feira.

Benzema iguala recorde de Roberto Carlos

Logo que a bola rolou, a partida já era especial para Karim Benzema. Isso porque o francês igualou o ex-lateral-esquerdo Roberto Carlos como o estrangeiro com mais jogos pelo time espanhol — 527. Ele está no clube desde 2009.

Mas não foi só isso. Benzema foi o responsável por jogar para longe qualquer risco de vexame por eliminação nesta quarta-feira. O centroavante apareceu duas vezes bem colocado na área e, de cabeça, deu números à partida.

Rodrygo e Vini Jr. ganham chance

O técnico Zinédine Zidane apostou em dois jovens brasileiros para a decisão. Rodrygo e Vinícius Jr. começaram entre os titulares e tiveram função importante no ataque merengue. O ex-santista, inclusive, foi o responsável pela assistência para o segundo gol de Benzema.

Mas eles também foram importantes na parte tática. Com a dupla cumprindo funções importantes de recomposição no setor defensivo, o Real teve atuação bastante sólida e não sofreu diante do Borussia. Os dois foram substituídos ao mesmo tempo, aos 28 minutos do segundo tempo.

Zidane vê pressão diminuir

Além da classificação para as oitavas de final da Champions, o Real viu a pressão em cima do técnico Zidane diminuir com a vitória de hoje. O treinador vinha sendo bastante questionado pelas atuações anteriores. Na semana ada, o treinador chegou a afirmar que não iria se demitir mesmo com a forte cobrança.

Foi a segunda vitória seguida do Real. Antes, a equipe havia vencido o Sevilla pelo Campeonato Espanhol.

M'gladbach torce após partida e se classifica

O Borussia M'gladbach precisava apenas de um empate, mas conseguiu a classificação mesmo com a derrota nesta tarde. Isso porque a equipe fechou a fase de grupos com os mesmos oito pontos do Shakhtar, mas levou vantagem no desempate pelo confronto direto — goleadas por 4 a 0 e 6 a 0.

Ao término da partida contra o Real, os jogadores do Borussia acompanharam os instantes finais de Inter de Milão e Shakhtar por um tablet ainda no campo. Com o apito final na Itália, os jogadores explodiram em comemoração.