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

Lionel Messi é eleito Bola de Ouro pela 7ª vez; CR7 fica fora de top 5

Do UOL, em São Paulo

29/11/2021 17h53Atualizada em 29/11/2021 21h27

Lionel Messi venceu, pela 7ª vez em sua carreira, o Bola de Ouro (Ballon d'Or), prêmio da revista Football que elege o melhor jogador do mundo anualmente. O evento se deu nesta tarde em Paris (veja o top 10 abaixo).

O atacante, que trocou o Barcelona pelo PSG em agosto, superou adversários como o polonês Lewandowski (2° lugar) e brasileiro naturalizado italiano Jorginho (3° lugar) em uma eleição que contou com 180 jornalistas.

"A verdade é que é incrível estar aqui novamente. Eu não sabia o que iria ar nos últimos anos, já que estou perto de encerrar minha carreira. Agora, em Paris, estou muito feliz e com vontade de seguir lutando por novos desafios", iniciou Messi em seu discurso.

Na sequência, ele enalteceu a importância do título da Copa América conquistado pela seleção argentina, em julho, sobre o Brasil, no Maracanã.

"Quero agradecer aos meus companheiros de Barcelona, do PSG e, especialmente, da seleção argentina. Neste ano, consegui o que faltava, a Copa América. Quero dividir meu prêmio com os meus companheiros. É muito especial para mim estar aqui com minha esposa e meus filhos".

"Foi uma honra brigar com Lewandowski pela conquista, ele mereceu vencer o prêmio The Best no ano ado", finalizou o argentino ao citar o atacante do Bayern de Munique, que ficou com o 2° lugar no prêmio principal da Football mas foi premiado como o artilheiro do ano.

Distantes do topo

Neymar, único representante do Brasil na disputa — que não ocorreu no ano ado em função da pandemia —, ficou na 16ª posição. Parceiro do camisa 10, Mbappé foi o 9°.

A grande surpresa do evento se deu com Cristiano Ronaldo, vencedor do prêmio em cinco oportunidades. Ele, que voltou para o Manchester United na atual temporada após agem pela Juventus, não chegou a estar entre os cinco melhores.

Veja como ficou o ranking dos 10 melhores:

  1. Lionel Messi (PSG)
  2. Robert Lewandowski (Bayern de Munique)
  3. Jorginho (Chelsea)
  4. Karim Benzema (Real Madrid)
  5. N'Golo Kanté (Chelsea)
  6. Cristiano Ronaldo (Manchester United)
  7. Mohamed Salah (Liverpool)
  8. Kevin De Bruyne (Manchester City)
  9. Kylian Mbappé (PSG)
  10. Gianluigi Donnarumma (PSG)