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

Liga dos Campeões 2019/2020

'Orgulhoso da trajetória, mas frustrado pelo jogo', diz Marquinhos

23.ago.2020 - Marquinhos e Robert Lewandowski durante a final da Liga dos Campeões  - Getty Images
23.ago.2020 - Marquinhos e Robert Lewandowski durante a final da Liga dos Campeões Imagem: Getty Images

Do UOL, em São Paulo

23/08/2020 19h15

No Paris Saint-Germain desde 2013, Marquinhos ainda não conquistou a Liga dos Campeões com a equipe sa. Hoje, depois de ver o Bayern de Munique levantar a taça da edição 2019/2020 do torneio, o brasileiro reconheceu que chegar à decisão foi importante, mas se disse "frustrado" pelo resultado da partida.

"A gente queria fazer história. Fizemos uma linda história na competição. Superamos uma etapa em relação ao que fazíamos, mas queríamos mais. Quando você chega longe, tem que sonhar. Orgulhoso da trajetória, mas frustrado pelo jogo, por não ter conseguido vencer a final", disse Marquinhos.

"A gente tem muito orgulho. É um projeto de um time muito novo. Estamos encarando equipes muito prontas, estruturadas para a competição. E a gente vem crescendo com nosso projeto, melhorando a cada ano", acrescentou o brasileiro.

Zagueiro, Marquinhos também tem sido aproveitado pelo técnico Thomas Tuchel como volante. Questionado sobre as mudanças em campo, o brasileiro não mostrou descontentamento.

"Estou disponível para ajudar na zaga ou como volante. Fico à vontade nas duas posições e sei da responsabilidade. O treinador confia em mim para as duas posições. Não tenho ideia fixa. Sou flexível para ajudar", considerou.

Ainda sobre a zaga, que dividiu por anos com Thiago Silva, Marquinhos falou sobre a importância do brasileiro para a equipe.

"Queria muito que o Thiago levantasse a taça, ele merece, por tudo o que ele fez pelo clube. Ele faz parte do crescimento do clube. Ajudou o clube a crescer. Seria muito bom vê-lo coroado. Infelizmente, não deu certo. Foram sete anos de parceria com um cara que é meu ídolo. Tirei muitas coisas boas dessa parceria, aprendi muito", afirmou.

Essa foi a última partida de Thiago Silva pelo PSG. Capitão e jogador mais vitorioso da história do clube, zagueiro brasileiro não terá o contrato renovado com o clube.