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

Jô quer encerrar carreira no Corinthians mesmo após polêmicas: 'Sou ídolo'

Jô, ex-jogador do Corinthians, vai jogar na 2ª divisão da Arábia Saudita  - Rodrigo Corsi/Agência Paulistão/Flickr
Jô, ex-jogador do Corinthians, vai jogar na 2ª divisão da Arábia Saudita Imagem: Rodrigo Corsi/Agência Paulistão/Flickr

Colaboração para o UOL, em Aracaju

26/01/2023 17h42

Aos 35 anos, o atacante Jô fechou com o Al Jabalain e vai jogar na 2ª divisão da Arábia Saudita. Em entrevista ao iG Esporte, ele afirmou que pretende encerrar sua carreira no Corinthians, que rescindiu com o jogador no ano ado após uma série de casos de indisciplina.

"A minha ideia desde que iniciei seria encerrar no Corinthians, porque independente de tudo que aconteceu na minha saída eu deixei sempre as portas abertas para a torcida. A maior parte tem um carinho muito grande por mim e sou muito grato ao clube. Então não tem como não pensar um dia em voltar ao clube e encerrar minha carreira lá", afirmou Jô.

Em relação à saída conturbada em sua terceira agem pelo Corinthians, Jô afirmou que carrega "alguns arrependimentos". Depois de rescindir com o Timão, o atacante fechou com o Ceará, que acabou rebaixado no Brasileirão.

"Eu só tenho que agradecer ao Corinthians. Hoje sou o jogador que me tornei graças ao Corinthians. Claro, me arrependo de algumas coisas que aconteceram no clube na minha última saída, talvez um pouco mais de paciência por entender o clube, por saber da pressão e tudo mais, mas muitas coisas acontecem para o nosso aprendizado. De resto meu sentimento sempre será de gratidão ao clube por tudo que fez por mim."

'Me considero ídolo do Corinthians'

Jô disse ainda que se considera um ídolo do Corinthians e destacou seus números pelo clube. Em 146 jogos, o atacante marcou 40 gols e deu 9 assistências, tendo sido protagonista no título brasileiro de 2017.

"Meus números estão lá, minha história ninguém vai apagar. Tenho meu nome marcado na história do time e me considero, sim, um ídolo por tudo que conquistei. Os torcedores sempre quando me encontram me agradecem e esse é o sentimento que levo para a vida."

Após a agem frustrada pelo Ceará, Jô acertou por cinco meses com o Al Jabalain, cuja principal missão na temporada é o o à 1ª divisão saudita.