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

Lateral do PSG pede paciência com elenco: 'Há muitos jogadores novos'

Neymar, Mbappé e Messi, em jogo do PSG - PA Images/PA Images via Getty Images
Neymar, Mbappé e Messi, em jogo do PSG Imagem: PA Images/PA Images via Getty Images

Do UOL, em São Paulo (SP)

06/12/2021 12h39

O lateral direito do Paris Saint-Germain, Achraf Hakimi, pediu que todos tenham mais paciência com o elenco do time francês por conta do alto número de jogadores novos. As contratações do PSG para esta temporada foram: Lionel Messi, Gianluigi Donnarumma, Sergio Ramos, Wijnaldum, Hakimi e Nuno Mendes.

Ele participou da coletiva de imprensa, ao lado do técnico Mauricio Pochettino, que antecede a partida contra o Club Brugge, pela Liga dos Campeões, amanhã, às 14h45 (de Brasília), no estádio Parque dos Príncipes.

"Sabemos que há muitos jogadores novos aos quais temos de nos adaptar. Houve muitos intervalos internacionais e, portanto, períodos sem jogar juntos. Isso virá aos poucos. Devemos ser pacientes", disse.

"Chegamos com muita vontade, muito entusiasmo de crescer juntos, de fazer grandes coisas, e acho que estamos no caminho certo. Trabalhamos bem juntos", acrescentou.

Hakimi é um desses novos jogadores que o PSG contratou nesta temporada. O clube parisiense pagou cerca de 60 milhões de euros (aproximadamente R$369 milhões na época) para tira-lo da Inter de Milão.

Desde que desembarcou na França, ele atuou em 27 partidas no PSG — marcando três gols e dando duas assistências. O defensor marroquino falou como é ser um dos jogadores mais utilizados no plantel.

"Não sabia que jogaria tanto. Mas eu sabia que estava entrando em um clube que fez um grande esforço para que eu pudesse vir, então tenho que dar tudo de mim por esse time", explicou.

"O Mauricio Pochettino também é quem me fez vir aqui, quem acreditou em mim, então ele também confia muito em mim. É normal querer devolver isso em campo", concluiu.