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

ANÁLISE

Texto baseado no relato de acontecimentos, mas contextualizado a partir do conhecimento do jornalista sobre o tema; pode incluir interpretações do jornalista sobre os fatos.

Weverton, do Palmeiras, foi o jogador com mais partidas disputadas em 2020

Weverton, goleiro do Palmeiras, na final da Copa do Brasil 2020 - César Grecco/Palmeiras
Weverton, goleiro do Palmeiras, na final da Copa do Brasil 2020 Imagem: César Grecco/Palmeiras

Colunista do UOL

10/03/2021 04h00

Na temporada 2020, o Palmeiras foi o time que mais disputou jogos (77), sendo o único a conseguir realizar o número máximo de partidas em todas as competições que entrou. Finalista e campeão do Paulistão, da Libertadores e da Copa do Brasil, o Alviverde disputou mais duas partidas no Mundial de Clubes da Fifa e as 38 do Brasileirão.

Titular absoluto do Palmeiras e um dos grandes destaques do time nessa temporada vitoriosa, o goleiro Weverton acabou sendo o jogador com mais partidas disputadas na temporada por um único clube entre os 20 clubes que disputaram a Série A do Brasileirão, entrando em campo em 68 dos 77 jogos (88,3% deles).

Depois de Weverton, outros dois goleiros entraram na lista dos jogadores que mais atuaram em 2020: Marcelo Lomba, do Internacional, e Tiago Volpi, do São Paulo, ambos com 64 jogos. Volpi, que ficou de fora de apenas uma partida na temporada, disputou os 38 confrontos do Brasileirão e foi o jogador com a maior porcentagem de jogos disputados (98,5%), seguido por Gil, zagueiro do Corinthians (94,8%).

Mais jogos por um único clube em 2020

Desempenho de Weverton pelo Palmeiras em 2020 - SofaScore - SofaScore
Desempenho de Weverton pelo Palmeiras em 2020
Imagem: SofaScore

Eleito o melhor goleiro da Libertadores (pela Conmebol), do Brasileirão (pela CBF e no prêmio Bola de Prata) e da Copa do Brasil (pela CBF), Weverton foi ainda convocado pelo técnico Tite na temporada 2020. Nos 68 jogos que fez pelo Palmeiras, Weverton sofreu apenas 44 gols (excelente média de 0,65 por partida) e ficou 34 jogos (metade!) sem ser vazado.

Segundo os números do SofaScore, o goleiro fez 198 defesas, teve apenas 2 erros defensivos e defendeu 82% das bolas que chegaram. Campeão Paulista, da Libertadores e do Brasileirão, Weverton fechou a temporada 2020 com feitos que dificilmente serão superados.

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