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

André Rocha

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Benzema salva Real e pune um Chelsea quase perfeito

Rodrygo e Benzema comemoram gol do Real Madrid contra o Chelsea na Liga dos Campeões 2021-22 - Jose Breton/Pics Action/NurPhoto via Getty Images
Rodrygo e Benzema comemoram gol do Real Madrid contra o Chelsea na Liga dos Campeões 2021-22 Imagem: Jose Breton/Pics Action/NurPhoto via Getty Images

Colunista do UOL Esporte

12/04/2022 19h03

Thomas Tuchel ensaiou o Chelsea para amassar jogando fora de casa no sábado, contra o Southampton pela Premier League. O mesmo 3-4-2-1, porém com Loftus-Cheek e Marcos Alonso nas alas, Kanté e Kovacic garantindo volume no meio-campo e Mason Mount, Kai Havertz e Timo Werner se mexendo muito na frente, criando e finalizando. Pressão no campo de ataque e intensidade máxima, além da eficiência nas finalizações.

Aos 31 minutos estava quatro e fechou 6 a 0 há três dias. No Santiago Bernabéu, a única mudança foi a troca de Christensen por Reece James, para marcar Vinicius Júnior e deixar Thiago Silva e Rudiger com Benzema.

A atuação dos Blues em Madri foi quase perfeita. Digna do atual campeão europeu. Abriu placar no primeiro tempo, com Mount. Ampliou no jogo aéreo com bola parada, na cabeçada precisa de Rudiger. O terceiro poderia ter saído antes com Marcos Alonso, mas o VAR viu toque (discutível) no braço do ala espanhol.

Werner resolveu em jogada bem trabalhada pela esquerda, iniciada por Marcos Alonso por dentro e o atacante entrando no espaço certo para entrar driblando e dar sorte na finalização que desviou em Courtois e foi às redes.

Quando tudo parecia perdido para os merengues com os 3 a 0, surgiram as individualidades: primeiro Courtois, salvando o quarto gol em cabeçada de Havertz. Logo depois Modric, com um e espetacular de três dedos para Rodrygo forçar uma inesperada prorrogação.

O Real jogou o tempo extra desfigurado, com Carvajal na zaga, depois da saída do lesionado Nacho Fernández, que já havia substituído Militão, para a entrada de Lucas Vázquez. Com Alaba e Marcelo de volta à lateral esquerda. No meio-campo, Modric de "cinco" à frente da defesa e qualificando a saída de bola, Valverde vindo da direita para dentro com Camavinga. Na frente, Rodrygo e a dupla que estava sumida, encaixotada pela marcação adversária.

Só que a missão de parar Benzema e Vinicius Júnior nos 90 minutos foi cumprida por James, Thiago e Rudiger. Mas por 120 no Bernabéu fica impossível.

e do brasileiro, gol do francês. O quarto no confronto. O sétimo no mata-mata desta edição. Para fazer ainda mais história e, com a eliminação do Bayern de Munique, de Lewandowski e seus 13 gols, Benzema, com 12, tem tudo para ser o artilheiro do torneio.

Salvou o Real que está na semifinal. Feito ainda maior pelo desempenho e pela coragem do Chelsea, que acabou punido pelos muitos erros no Stamford Bridge. Mas a Champions viu um dos confrontos de roteiro mais surpreendente da história recente. Melhor para quem ama este esporte.