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

T. Silva quer coroar adeus com título e torce por Neymar melhor do mundo

Thiago Silva falou após vitória do PSG na semifinal da Liga dos Campeões - Michael Regan - UEFA/UEFA via Getty Images
Thiago Silva falou após vitória do PSG na semifinal da Liga dos Campeões Imagem: Michael Regan - UEFA/UEFA via Getty Images

Do UOL, em São Paulo

18/08/2020 18h45

Thiago Silva se prepara para se despedir do PSG no próximo domingo (23), quando o clube disputará a final da Liga dos Campeões — o defensor deixará o clube ao final da competição. Após a vitória de hoje na semifinal contra o Red Bull Leipzig, o zagueiro brasileiro afirmou que espera coroar sua agem pelo clube francês com o título da Champions.

"É difícil, eu também não sabia se seria o último contra a Atalanta [nas quartas de final] ou hoje, mas temos a certeza que o próximo jogo será o último. Espero que seja de maneira vitoriosa. Os anos foram de muita batalha, momentos felizes e momentos conturbados, derrotas que caíram nas nossas costas por ser o capitão, mas estou aqui para botar a cara. Espero que o último jogo coroe. Não tenho contrato assinado com outro clube. O futuro a Deus pertence. Tenho certeza que serei feliz", disse ao Esporte Interativo.

Thiago comemorou a classificação para a primeira final da história do PSG na Champions e relembrou as eliminações nos últimos anos.

"Sentimento de muita alegria, felicidade. A gente vinha correndo atrás desde a minha chegada aqui em 2012, e todo ano tinha alguns contratempos, algumas coisas que a gente não conseguia avançar. Ficava com aquele peso, principalmente nos últimos três anos, nas oitavas de final. Esse ano, viemos com mentalidade diferente. Hoje, eu sinto que somos um grande grupo, não só dentro de campo, mas sim fora dele", declarou o zagueiro, que ainda falou sobre as chances de Neymar ser eleito o melhor jogador do mundo caso o PSG conquiste o título.

"Ganhando ou não, acredito que ele tem potencial para ganhar a Bola de Ouro. A gente sabe que é objetivo dele, é visível para todo mundo. Esse ano, ele fez coisas incríveis, está motivado. Durante a pandemia, fizemos treinos juntos, nos preparamos para esse momento. O momento dele vai chegar. É só trabalhar como vem trabalhando. Espero que faça um excelente jogo domingo, como vem fazendo. O time está no caminho certo. Esse momento dele vai chegar", afirmou Thiago Silva.

Por fim, o defensor falou sobre a torcida de brasileiros pelo PSG na Champions. "Isso nos motiva muito. É motivo de grande orgulho. Dá ainda mais motivação para recompensá-los. A gente sabe que o carinho é especial e procura retribuir aqui."