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

Rafael Reis

Herói do Bayern nasceu no PSG e teve de ir embora por espaço para estrelas

Coman comemora seu gol, que deu o título europeu ao Bayern de Munique - Pool/Getty Images
Coman comemora seu gol, que deu o título europeu ao Bayern de Munique Imagem: Pool/Getty Images

23/08/2020 18h02

Receba os novos posts desta coluna no seu e-mail

Email inválido

A "lei do ex" decidiu a Liga dos Campeões. Kingsley Coman, o homem que deu ao Bayern de Munique seu sexto título europeu, nasceu para o futebol no Paris Saint-Germain e só foi embora de lá porque não havia espaços para garotos no projeto de crescimento internacional do clube.

O atacante, que cabeceou para marcar o único gol da decisão em Lisboa, nasceu na capital sa, há 24 anos, e ou oito temporadas atuando nas categorias de base da equipe de sua cidade.

Promovido ao time principal em 2013, quando tinha apenas 16 anos, disputou só quatro partidas e ficou em campo por 55 minutos antes de os planos dos qatarianos que mandam no PSG mudarem radicalmente os rumos de sua carreira.

Com o desejo de se encher de estrelas (como Zlatan Ibrahimovic e Edinson Cavani) para um dia conquistar a Europa, o clube não tinha espaço para que suas jovens promessas amadurecessem por lá.

Por causa disso, acabou permitindo que Coman se mandasse para a Juventus. E sem custo nenhum.

O atacante ou só um ano na Itália. Em 2015, foi emprestado para o Bayern de Munique. Depois de duas temporadas, teve os direitos econômicos comprados pelos bávaros.

Aos 24 anos, acumula uma galeria de medalhas que poucos jogadores podem ser orgulhar de possuir. Já ganhou dois títulos ses, dois italianos, cinco alemães e, agora, uma Liga dos Campeões. Coman foi campeão nacional em simplesmente todos os anos de sua trajetória como profissional.

Curiosamente, sua escalação na decisão contra o PSG foi a surpresa armada por Hans-Dieter Flick para bagunçar a defesa adversária. O francês vinha sendo preterido por Ivan Perisic na reta final da Champions por ainda não ter recuperado sua melhor forma física devido a um problema muscular.

Mas, na hora do vamos ver, o técnico do Bayern apelou para o jogador que foi embora de Paris porque não era uma estrela. E que agora se tornou o astro que desbancou o PSG e fez dos alemães os vencedores da Champions mais uma vez.