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

Rodolfo Rodrigues

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Título da Liga dos Campeões é um prêmio à carreira de Thiago Silva

Thiago Silva e De Bruyne disputam bola na final da Champions - David Ramos/Getty Images
Thiago Silva e De Bruyne disputam bola na final da Champions Imagem: David Ramos/Getty Images

Colunista do UOL

29/05/2021 17h57

Vice da Liga dos Campeões em 2019/20 com o PSG, o zagueiro Thiago Silva não teve seu contrato renovado com o time francês e deixou o clube após a decisão. Em 8 temporadas pelo Paris Saint-Germain, entre 2012 e 2020, disputou 315 jogos (6º com mais partidas pelo clube até sua saída), e conquistou 23 títulos.

Contratado pelo Chelsea, o zagueiro de 36 anos virou titular de cara do clube inglês e foi um dos destaques do time na temporada 2020/21. Isso mesmo depois da chegada do técnico alemão Thomas Tuchel, que não fez questão de contar com ele no PSG para esta temporada.

Thiago Silva disputou 33 jogos (sendo um apenas como reserva), e chegou à final deste sábado como tilular. Para o seu azar, acabou tendo que sair no final do primeiro tempo, aos 38 minutos, quando sentiu uma lesão na virilha.

Destaque do time na campanha do título, Thiago Silva conseguiu conquistar a Liga dos Campeões pela primeira vez depois de 12 temporadas seguidas em alto nível no futebol europeu, com Milan (2009-2012), PSG (2012-2020) e agora pelo Chelsea (2020-2021).

Na história da Liga das Campeões, Thiago Silva é um dos poucos zagueiros brasileiros a conquistar a taça, repetindo o feito de outros dois que foram campeões pelo Chelsea em 2012 (David Luiz e Alex). Desde 2013, quando Dante foi campeão pelo Bayern, nenhum outro zagueiro brasileiro havia sido campeão.

Zagueiros brasileiros campeões da Champions League (1955-2021):
1987 - Celso (Porto)

1997 - Júlio César (Borussia Dortmund)
2003 - Roque Júnior (Milan)
2006 - Edmílson (Barcelona)
2010 - Lúcio (Internazionale)
2012 - Alex (Chelsea)
2012 - David Luiz (Chelsea)
2013 - Dante (Bayern Munique)
2021 - Thiago Silva (Chelsea)

Na carreira, com essa conquista, Thiago Silva conquistou seu 28º título, o primeiro pelo Chelsea, coroando um carreira brilhante no futebol europeu.

Você pode me encontrar também no twitter (@rodolfo1975) ou no Instagram (futebol_em_numeros)