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

São Paulo

SPFC: Luciano pode completar 300 jogos na carreira contra Sporting Cristal

Luciano, atacante do São Paulo, participa de treino no CT da Barra Funda - Divulgação/São Paulo
Luciano, atacante do São Paulo, participa de treino no CT da Barra Funda Imagem: Divulgação/São Paulo

Thiago Fernandes

Do UOL, em São Paulo

20/04/2021 12h13

Artilheiro do São Paulo no Brasileirão ado, Luciano pode comemorar uma marca importante em sua trajetória profissional: se entrar em campo contra o Sporting Cristal pela Libertadores, ele completa 300 jogos em sua carreira. O camisa 11 do Tricolor paulista começou sua carreira no Atlético-GO, depois teve agens por Avaí, Corinthians, Leganés, Panathinaikos, Fluminense e Grêmio.

"Fico muito feliz em poder celebrar esse feito em minha carreira. Uma marca muito importante e que vou lembrar para sempre com muito carinho. Cheguei até aqui com muito trabalho, empenho e esforço. Até hoje, me dedico muito e amo o que faço. Vamos por mais marcas como essa! Agradeço muito a todos que me ajudaram na minha trajetória, começando por Deus, minha esposa, família, amigos, empresários, direção dos clubes, treinadores e companheiros de equipe. Muito obrigado, de coração", comemora Luciano.

O atacante são-paulino é goiano de Anápolis e começou a carreira no Atlético-GO. Depois de ar pelo Avaí, chegou ao Corinthians em 2014 e ficou até 2016. Nesse período, chamou a atenção de times europeus e por lá viveu experiências interessantes.

Luciano desembarcou no meio de 2016 no Leganés, da Espanha, clube que pela primeira vez havia conseguido subir à elite. Atuou em boa parte da campanha na temporada e viveu o melhor momento em abril de 2017. Na época, marcou um gol no Real Madrid, gigante europeu.

Depois ou pelo Panathinaikos, da Grécia, por empréstimo. No segundo semestre de 2018 estava de volta ao Brasil, onde desembarcou no Fluminense e encontrou um técnico que mudaria a sua vida: Fernando Diniz.

Luciano jogou pelo Fluminense, depois foi para o Grêmio e só chegou ao São Paulo graças à insistência do treinador. Os gols não pararam de sair desde então e a comemoração ensaiada, que até pouco tempo atrás era só um plano, virou uma rotineira e agradável cena para todo torcedor são-paulino.

No time com o nome da capital paulista, Luciano atuou em 44 jogos e marcou 23 gols. Foi o artilheiro do Campeonato Brasileiro com 18 gols, líder em participação de gols com 21 e o terceiro artilheiro do Brasil na temporada ada, com 24 tentos.

JOGOS DA CARREIRA DE LUCIANO:

Atlético-GO: 7
Avaí: 28
Corinthians: 89
Léganes: 27
Panathinaikos: 13
Fluminense: 55
Grêmio: 36
São Paulo: 44

São Paulo