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

Permanência no PSG segue plano de Neymar para escolher destino aos 30 anos

Neymar lamenta derrota do PSG na final da Liga dos Campeões - Pool/Getty Images
Neymar lamenta derrota do PSG na final da Liga dos Campeões Imagem: Pool/Getty Images

João Henrique Marques e Pedro Lopes

Do UOL, em Paris e São Paulo

02/09/2020 04h00

Neymar fez de tudo para ir ao Barcelona no meio do ano ado, mas não conseguiu. A expectativa em torno do seu futuro depois desta temporada era grande, mas ele encerrou qualquer especulação ao anunciar que permanece no PSG. Pode parecer que houve uma mudança de planos, mas isso não é totalmente verdadeiro: ao seguir em Paris até o final do contrato, o atacante cumpre um objetivo traçado para sua carreira desde 2013.

A partir da transferência do Santos para o Barcelona, Neymar da Silva Santos, pai do jogador, traçou planos para que o filho chegasse aos 30 anos como um "free agent" — termo para um jogador sem clube.

O objetivo era chegar ao auge da carreira, consolidado como um dos melhores jogadores do mundo sem estar preso a qualquer clube, e poder escolher o destino onde iria jogar os últimos anos no mais alto nível do futebol, fazendo seu último grande contrato.

A meta esteve na mesa no Barcelona: depois do primeiro contrato de entrada no futebol europeu, renovou até 2021, em um acordo que terminaria quando completasse 29 anos. O caminho mudou com a transferência ao PSG, mas o plano se manteve, com um contrato válido até 2022 — ano em que Neymar completa 30 anos.

Cumprindo o contrato com o clube parisiense até o fim, Neymar chegará exatamente à posição traçada pela sua carreira quase dez anos antes: com status de um dos maiores jogadores do mundo, pelo menos dois anos em alto nível pela frente e livre para escolher onde atuar.

Há uma variável a ser considerada: o PSG quer, a todo custo, renovar o contrato de seu camisa 10, e tem recursos financeiros de sobra para tentar convencer seu estafe. Pessoas próximas a Neymar têm falado, entretanto, em cumprir os dois anos do acordo, lutando pela conquista de uma Liga dos Campeões nesse meio tempo, e analisar com calma o futuro, mantendo os planos traçados há sete anos.

Chegar aos 30 anos como um jogador livre pode ser, inclusive, financeiramente mais interessante do que qualquer grande contrato no momento. O clube que quiser Neymar daqui a dois anos não teria de desembolsar nada a título de transferência ou cláusula rescisória: isso, naturalmente, abre caminho para que valores maiores sejam oferecidos diretamente ao jogador, potencialmente em um dos maiores contratos já feitos no futebol.

Neymar atualmente descansa depois do vice-campeonato da Liga dos Campeões da Europa no último dia 22. Nesta semana, o jogador encerrou sua parceria de 15 anos com a Nike, fornecedora de material esportivo.