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

Eurocopa ou Olimpíadas? Mbappé quer jogar ambos, mas datas podem atrapalhar

Mbappé sorri durante aquecimento antes de PSG x City pela Champions League  - Anne-Christine POUJOULAT / AFP
Mbappé sorri durante aquecimento antes de PSG x City pela Champions League Imagem: Anne-Christine POUJOULAT / AFP

Colaboração para o UOL, em São Paulo (SP)

10/05/2021 21h29

Kylian Mbappé, atacante fenômeno francês do PSG, foi convocado na pré-lista da França para as Olimpíadas de Tóquio 2020, disputadas em 2021, e pretende atuar, o que pode gerar um conflito de datas com a Eurocopa, que será disputada também esse ano.

Mbappé já é um jogador consolidado no cenário internacional e campeão da Copa do Mundo, tendo apenas 22 anos, que é idade olímpica, e ajudaria na composição da lista final, que permite apenas três jogadores que excedam 24 anos.

O grande problema são as datas. A Eurocopa será disputada com o que a França tem de melhor e, invariavelmente, Mbappé entre 11 de junho e 11 de julho, enquanto as Olimpíadas estão marcadas entre 22 de julho e sete de agosto com um time mais jovem e apenas três jogadores acima de 24 anos.

Com isso, se a França chegar na final da Eurocopa e Mbappé for convocado de fato para os Jogos Olímpicos de Tóquio, ele teria apenas 11 dias de descanso entre os torneios.

Vale ressaltar que Mbappé já demonstrou interesse real de disputar os Jogos Olímpicos há algum tempo, mas isso pode ser complicado por conta da Eurocopa e também porque, por não ser um torneio que acontece em uma data FIFA, o PSG pode optar por não liberar o atleta.

O jornal Le Parisien destaca que o PSG não deve se opor às vontades de Mbappé, porque o time tenta renovar o contrato do craque, que termina em 2022 e não quer desgastar a relação com ele. Mesmo assim, não é certeza que o jogador vai renovar com o PSG, mas o time deve aliviar e liberar o jogador para os Jogos Olímpicos para satisfazer as vontades dele.