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

PSG faz história na semifinal com espetáculo individual e coletivo

Neymar e Di María comemoram segundo gol do PSG sobre o RB Leipzig na semifinal da Champions - David Ramos/Getty Images
Neymar e Di María comemoram segundo gol do PSG sobre o RB Leipzig na semifinal da Champions Imagem: David Ramos/Getty Images

Colunista do UOL Esporte

18/08/2020 17h50

O RB Leipzig fez o que pôde na histórica semifinal de um time de 11 anos de existência. Nagelsmann tentou tudo em termos táticos, variando linha de quatro atrás se defendendo, com Mukiele pela direita, e três na retaguarda com a equipe atacando. Com Laimer voando pela direita, no 4-1-4-1 ou no 4-2-3-1 quando Dani Olmo e depois Schick na frente com Polsen.

A equipe alemã sempre tentou jogar. Mas cometeu erros que um adversário tão qualificado e concentrado não perdoa. Para azar de Nagelsmann e seus comandados, o Paris Saint-Germain entrou com o espírito do tamanho do jogo mais importante para este projeto ambicioso.

E o que se viu foi um espetáculo. Individual e coletivo. Com Thomas Tuchel encontrando a melhor formação na hora certa. Apostando em qualidade desde a construção de trás, com a bola ando por Marquinhos entre os zagueiros Thiago Silva e Kimpembe e Paredes, auxiliado por Ander Herrera, fazendo a bola chegar ao trio Di María-Neymar-Mbappé. Com mobilidade e castigando também na velocidade a defesa adversária. Mesmo desperdiçando alguns contragolpes.

Forte também na bola parada que descomplicou com o gol de Marquinhos completando de cabeça cruzamento aberto de Di María pela esquerda. Ainda uma cobrança genial de Neymar por fora da barreira que bateu na trave. Na saída errada do goleiro Gulácsi, a assistência genial de Neymar para Di María encaminhar a vitória ainda no primeiro tempo de 67% de posse da equipe sa com impressionantes 91% de efetividade nos es.

Confiança para sobrar na segunda etapa e Bernat marcar o terceiro, em jogada que começou com Mukiele escorregando e outra assistência de Di María. Outro vacilo do Leipzig que precisa amadurecer para ir além. Mas ainda é cedo e o feito já foi enorme.

Agora é a vez do PSG buscar o título. Aproveitando o contexto único desta Champions para se impor. Com maturidade, talento e trabalho coletivo. O caminho mais curto agora só tem mais uma etapa.

(Estatísticas: UEFA)