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

Fernandinho vê 'seleção' do PSG e City correndo por fora na Champions

Fernandinho em ação contra o PSG na semifinal da Liga dos Campeões da Europa de 2020/21 - PHIL NOBLE/REUTERS
Fernandinho em ação contra o PSG na semifinal da Liga dos Campeões da Europa de 2020/21 Imagem: PHIL NOBLE/REUTERS

Colaboração para o UOL, em São Paulo

21/08/2021 23h07

O meio-campista Fernandinho, do Manchester City, avaliou que a chegada de jogadores como Messi, Donnarumma e Sergio Ramos ao PSG torna o time francês muito difícil de ser batido. Na opinião do jogador, em um possível duelo na Liga dos Campeões, muitos fatores teriam que conspirar para uma vitória sobre o time da capital sa.

"A gente olha para o PSG, né. O comentário é que eles estão montando uma seleção, né? Se pegar em um confronto de Liga dos Campeões, vai ter que montar uma estratégia muito boa, vai ter que estar no melhor dia, vai ter que acontecer tudo ao nosso favor", disse o jogador em entrevista ao Bola da Vez, da ESPN Brasil, exibido hoje (21).

Para Fernandinho, os holofotes estão voltados para o PSG e o Manchester City a a ser um franco-atirador na disputa pelo principal título do continente europeu.

"O holofote, pela grandiosidade dos nomes dos jogadores que estão ali, Neymar, Mbappé, Messi, Di María, Sergio Ramos, Marquinhos, Verratti, todos jogadores supercampeões, acostumados a ganhar o campeonato doméstico, o Messi e o Sergio Ramos trazem a experiência da Liga dos Campeões, então é um time muito forte. (...) A gente corre por fora porque não tem nomes como os do PSG, mas tem um grupo muito sólido", acrescentou.

Duelo nas semifinais em 2020/21

Na última temporada, os estrelados elencos de City e PSG se cruzaram nas semifinais da Liga dos Campeões da Europa. O time inglês levou a melhor nos dois jogos, vencendo por 2 a 1 e 2 a 0, garantindo vaga na final, em que acabou derrotado pelo Chelsea por 1 a 0.