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

Ribéry anuncia aposentadoria e já tem uma nova profissão

Franck Ribery se despediu do futebol - Tobias SCHWARZ / AFP
Franck Ribery se despediu do futebol Imagem: Tobias SCHWARZ / AFP

Do UOL, em São Paulo

21/10/2022 09h16

Aos 39 anos, Franck Ribéry anunciou sua aposentadoria do futebol nesta sexta-feira (21). O atacante estava atuando pela Salernitana, da Itália. Nas últimas semanas, a imprensa europeia já havia especulado que o francês estaria pensando em pendurar as chuteiras por conta dos constantes problemas físicos.

O anúncio foi feito pelo próprio jogador nas redes sociais. Na legenda da publicação, Ribéry escreveu: "A bola para. Os sentimentos dentro de mim, não".

No vídeo onde aparece em fotos atuando por diversos clubes ao longo da carreira, Ribéry também mandou um recado aos fãs.

"Queridos amigos, queridos fãs. Eu quis fazer esse vídeo para dizer que o tempo chegou para mim, para eu me aposentar como jogador de futebol. Com vocês e com o seu apoio, fui capaz de tornar meu sonho realidade e eu agradeço vocês do fundo do meu coração. O fato de eu ser capaz de jogar futebol no meu mais alto nível por mais de 20 anos e ter essa carreira também se deu porque, até nos momentos de dificuldades, vocês sempre estiveram lá", começou dizendo o agora ex-jogador.

"Vocês me deram a força para viver essa incrível aventura. Entretanto, hoje, apesar dos esforços que vinha fazendo nos últimos três meses, a dor que sinto no meu joelho só tem piorado e os médicos foram claros: eu não tinha escolha a não ser parar de jogar. Então eu tive que encerrar minha carreira como jogador profissional. É o fim de um lindo capítulo da minha vida", completou o jogador em outro trecho do vídeo.

Ribéry será homenageado amanhã (22) no estádio Arechi, em Salerno, pelos torcedores da Salernitana antes da partida contra o Spezia.

O técnico da Salernitana, Davide Nicola, confirmou que Ribéry permanecerá na equipe italiana, mas como um de seus auxiliares no banco de reservas.

"É uma alegria ver que ele quer ficar aqui, mesmo em outra função. Tê-lo em nossa equipe é um prazer, Ribéry poderia ter feito qualquer coisa em qualquer lugar do mundo e, em vez disso, concordou em ficar conosco. Ele será um colaborador 360°", disse Nicola.

O craque francês se profissionalizou no futebol em 2000, pelo Boulogne, da França, depois de ar um tempo no Lille. Após ar por Olympique Alès, Stade Brestois e Metz em seu país, o atacante se mudou para o Galatasaray, da Turquia, voltando à sua terra natal pouco depois para jogar no Olympique de Marseille.

Em 2007, Ribéry chegou ao Bayern de Munique, onde viveu o auge de sua carreira. Foram 12 anos no clube alemão e 24 títulos conquistados. Foi atuando pelo time da Baviera que o francês foi eleito o melhor jogador atuando na Europa em 2013 pela UEFA. No mesmo ano, no entanto, o atleta ficou atrás de Cristiano Ronaldo na disputa para vencer a Bola de Ouro, que naquela época era entregue de forma conjunta pela FIFA com a revista " Football".

Após os anos de glória no Bayern, Ribéry se aventurou no futebol italiano, onde estava até hoje. O jogador defendeu Fiorentina e Salernitana no "País da Bota".

Pela seleção sa, Franck disputou 81 partidas e esteve presente nas Copas do Mundo de 2006 e 2010.

Veja o vídeo: