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

Richarlison: Neymar caiu na risada quando falei que era fã e viramos amigos

Neymar e Richarlison comemoram gol da seleção brasileira contra El Salvador - Pedro Martins / MoWA Press
Neymar e Richarlison comemoram gol da seleção brasileira contra El Salvador Imagem: Pedro Martins / MoWA Press

Colaboração para o UOL, em São Paulo

20/02/2021 19h12

O atacante Richarlison contou que sua primeira conversa com o hoje amigo Neymar foi bem inusitada. O jogador do Everton disse que o encontro, que aconteceu nos Estados Unidos, onde a seleção brasileira se preparava para um amistoso, foi a chance de dizer ao atleta do PSG o quanto era seu fã e fazê-lo rir com a situação.

"Me dou super bem com o Neymar. Lá no Twitter sou o maior puxa-saco dele, sou muito fã. Toda vez que ele vai jogar a Champions League eu fico na torcida, tenho um carinho muito grande, porque foi um cara que quando surgiu lá no Santos, eu estava começando ainda. Então o cara surgiu, arrebentou no futebol, começou a jogar na seleção, fazia muitos gols e a gente queria imitá-lo", disse o atacante do Everton em entrevista ao Bola da Vez, que vai ao ar na ESPN Brasil hoje, às 22h.

"É o cara, era o craque do Brasil e a gente queria imitar ele. Foi o que eu falei com ele na primeira vez que eu fui para seleção lá nos Estados Unidos. Eu imitava o corte dele, tinha camisa do Santos, então ele caiu na risada e a gente se tornou amigo. Defendo ele em qualquer coisa que acontece nas redes sociais", continuou.

Na mesma entrevista, Richarlison comentou o episódio em que Neymar vazou seu número de telefone durante uma live nas redes sociais. O atacante do Everton disse que encarou a situação de maneira tranquila e que aproveitou para mandar um recado aos fãs.

"Ele estava fazendo uma live, foi me ligar para me apresentar para os fãs dele, acabou vazando meu número, mas está de boas. Troquei o chip e mandei até um recado para a galera. Falei que o hexa era nosso e mandei um: 'valeu rapaziada'", completou.