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

Rocha: Vinicius Jr. volta ao Real como saiu: melhor brasileiro na Europa

Vinicius Jr comemora gol marcado pelo Real Madrid contra o Valencia - David S. Bustamante/Soccrates/Getty Images
Vinicius Jr comemora gol marcado pelo Real Madrid contra o Valencia Imagem: David S. Bustamante/Soccrates/Getty Images

Colunista do UOL Esporte

08/01/2022 19h09

Vinicius Júnior ficou fora da derrota para o Getafe por 1 a 0, na primeira partida do Real Madrid em 2022. Testou positivo para Covid e foi substituído por Rodrygo. Revés que encerrou uma invencibilidade de 15 partidas.

Mas bastou a volta do brasileiro à equipe no retorno do time merengue à La Liga, depois de vencer o Alcoyano por 3 a 1 pela Copa do Rei, para confirmar a importância do atacante pela esquerda no 4-3-3 de Carlo Ancelotti e também à condição que parecia improvável a curto/médio prazo, até por uma concorrência que parecia insuperável.

Vinicius é hoje o melhor brasileiro atuando em alto nível na Europa. Neymar já vinha em baixa, perdendo protagonismo para Messi e Mbappé no PSG, e agora está novamente lesionado. Sem contar a falta de foco na carreira, especialmente nas festas da virada de ano.

Nos 4 a 1 sobre o Valencia no Santiago Bernabéu, Vinicius Júnior foi desequilibrante desde o primeiro tempo. Combinando bem com Mendy e Kroos pela esquerda, servindo Modric para o chute no travessão, melhor oportunidade antes do pênalti mais que questionável sobre Casemiro que Benzema converteu, chegando ao 300º gol pelo Real Madrid.

Com espaços na segunda etapa, marcou belo gol em linda jogada coletiva, incluindo tabela com Benzema e drible antes de finalizar. Impressionando de novo pela tranquilidade para concluir à frente do goleiro Cillessen. Depois marcando o 12º na liga, e são 14 na temporada, apenas empurrando para as redes de cabeça o rebote do goleiro após finalização de Asensio. O espanhol mais uma vez funcionou como um ponteiro canhoto pela direita. Combinando bem com Lucas Vázquez, novamente substituindo o lesionado Carvajal.

Uma das vantagens do Real Madrid na temporada é justamente mudar pouco a base titular, especialmente nos jogos mais importantes. Courtois é outro destaque, apesar da goleada. Fez seis defesas, incluindo o pênalti cobrado por Gonçalo Guedes, mas o atacante português conferiu de cabeça no rebote, marcando o gol único dos visitantes.

No final, pouco antes de sair substituido, Benzema fechou a goleada, chegando aos 17 na artilharia da liga. Vinicius Júnior já estava sentado no banco, depois de dar lugar a Valverde. Destaque absoluto com três dribles bem-sucedidos em sete tentativas e, o mais importante, as duas finalizações no alvo nas redes, de um total de quatro.

A precisão no acabamento dos ataques era o que faltava a Vinicius e a evolução é nítida, aos 21 anos. Graças também a Ancelotti, que parece cada vez mais próximo da conquista nos pontos corridos que falta na trajetória do treinador italiano no Real. Apesar do tropeço na rodada anterior, sem Vinicius Júnior.

Com o brasileiro, jogador mais valioso do mundo segundo estudo publicado pelo CIES Football Observatory, avaliado em 166,4 milhões de euros, o Real Madrid fica bem mais forte. Se Tite quiser, a seleção pode seguir o mesmo caminho.

(Estatísticas: SofaScore)