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

Gabriel Medina vê Real X PSG em lancha e manda recado para Neymar

Gabriel Medina registra incentivo a Neymar em lancha - Reprodução Web: // Instagram Gabriel Medina
Gabriel Medina registra incentivo a Neymar em lancha Imagem: Reprodução Web: // Instagram Gabriel Medina

Colaboração para o UOL, em São Paulo (SP)

09/03/2022 17h35

Gabriel Medina, surfista tricampeão mundial, está em Balneário Camboriú com amigos e, em uma lancha, registrou que está na torcida por Neymar, do PSG, no jogo de hoje (9) contra o Real Madrid, pelas oitavas de final da Liga dos Campeões.

Gabriel Medina é corinthiano e gosta muito de futebol. O surfista e Neymar são "parças" há muitos anos e, além de terem a mesma faixa etária e participarem de várias festas e eventos juntos, são muito amigos. "Vamo meu garoto", escreveu Medina no registro da TV com Neymar no aquecimento.

A dupla é tão ligada nas redes sociais e sintonizada que, pouco antes do jogo começar, Gabriel Medina postou uma sequência de fotos com a legenda "Vivendo :)". Neymar, mesmo concentrado no jogo, deixou seu comentário com emojis: "Vivão e vivendo".

Gabriel Medina pausou sua carreira e ainda não competiu na atual temporada do Circuito Mundial de Surfe. O surfista perdeu as duas primeiras etapas e a disputada em Portugal, que terminou com Filipe com o vice-campeonato.

"Em respeito à imprensa e aos meus fãs, que sempre me apoiaram, eu preciso ser honesto com vocês. Essa foi uma decisão difícil, acredito que uma das mais difíceis que já tomei. Eu vou me ausentar das primeiras etapas de 2022. Por mais que eu queira estar na água surfando e competindo, eu não estou bem física e emocionalmente para isso. E reconhecer que cheguei ao limite tem sido um processo duro", explicou à época

Nesse meio tempo sem competições, Medina vem se dedicando aos amigos, treinos e a saúde mental, registrando momentos de descontração nas redes sociais, como surfar junto de um cachorro. Vale ressaltar que o atleta terminou recentemente seu casamento com Yasmin Brunet.