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

ANÁLISE

Texto baseado no relato de acontecimentos, mas contextualizado a partir do conhecimento do jornalista sobre o tema; pode incluir interpretações do jornalista sobre os fatos.

Barcelona conquista mais uma Copa do Rei com dupla de ataque "improvável"

Messi comemora gol do Barcelona na Copa do Rei - MARCELO DEL POZO/REUTERS
Messi comemora gol do Barcelona na Copa do Rei Imagem: MARCELO DEL POZO/REUTERS

Colunista do UOL Esporte

18/04/2021 08h38

O Barcelona conquistou a 31ª Copa do Rei de sua história. A sétima na "Era Messi". Goleando por 4 a 0 o Athletic Bilbao, que perdera duas semanas antes a final do mesmo torneio, mas na edição 2019/20, para a Real Sociedad. Particularidades do futebol na pandemia, ainda ajustando o calendário na Europa.

Seria uma conquista quase protocolar do time catalão, mas tudo ganha outra dimensão por conta da possível saída do gênio argentino ao final da temporada. Com as dificuldades financeiras do clube, as perspectivas para seguir pagando o salário milionário do maior e melhor jogador que já vestiu a camisa blaugrana e dar a ele um time forte para brigar de fato pela Liga dos Campeões são remotíssimas.

Mas com este elenco é possível fechar a temporada 2020/21 recuperando o domínio na Espanha. A disputa pela liga com a dupla de Madri está mais que aberta e a copa nacional já está no bolso.

Com bela atuação no segundo tempo, quando o 3-1-4-2 armado por Ronald Koeman encaixou melhor e voou com espaços, depois de furar o bloqueio defensivo do time basco com o gol de Griezmann. A chave foi preencher a área adversária não só com o atacante francês, mas também Messi, De Jong, Pedri e também os alas Dest e Jordi Alba. Trocando es e chegando em bloco, já que não tinha a rapidez e a profundidade de Dembelé na frente.

Compensada pela técnica de uma dupla de ataque inesperada. Ou "improvável", pelo contexto. Mesmo antes do anúncio oficial da contratação de Griezmann, a dúvida era como encaixar no time o craque vindo do Atlético de Madri que brilhara justamente executando função e ocupando a mesma zona de campo de Messi. Partindo da direita para conduzir com a canhota e buscando os espaços entre a defesa e o meio-campo adversário.

A solução foi óbvia: Griezmann foi buscar em seu repertório os movimentos dos tempos de ponteiro, inclusive na seleção. E agora ele se sacrifica mais adiantado, como uma referência móvel, para que Messi possa seguir confortável. Inclusive marcando um gol espetacular, driblando e tabelando com companheiros desde o próprio campo até o ato final ao seu estilo, cortando da direita para dentro e finalizando com maestria.

Frenkie De Jong foi o melhor da decisão, justamente pela dinâmica como meia que viabilizou uma agressividade maior do Barcelona na frente. Inclusive marcando o segundo gol que encaminhou o triunfo. Mas o grande personagem, claro, foi Messi. Dois gols, o segundo completando jogada também tradicional, de Alba chegando ao fundo e dando assistência.

E se entendendo bem com Griezmann, que se reinventa mais uma vez para colaborar com a equipe. E no final ver uma cena tão desejada por todo barcelonista: Messi feliz com os companheiros levantando mais uma taça. Pode ser a última. Ou a primeira do ciclo final de uma história com altos e baixos, mas sempre especial.