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

Pan 2019

Campeão no Pan, Bruno Fratus se inspirou em Giba para amadurecer na natação

Bruno Fratus com a medalha dos 50m livre no Pan de Lima - Luis ROBAYO / AFP
Bruno Fratus com a medalha dos 50m livre no Pan de Lima Imagem: Luis ROBAYO / AFP

Karla Torralba

Do UOL, em Lima (Peru)

10/08/2019 04h00

Bruno Fratus é daqueles pilhados por resultado. Um atleta de alto rendimento que vai deixar explícito seu descontentamento com uma prova em que tenha marcado tempo acima do que poderia ter feito. Mesmo que tenha ganhado o ouro nela.

O principal nome da natação brasileira hoje e medalhista de ouro nos 50m livre do Pan de Lima precisou maneirar em sua autocobrança. Isso só foi possível, segundo ele, com mais maturidade.

"Eu me lembro de uma palestra do Giba [ex-vôlei], que falava que a maturidade física encontrava a maturidade psicológica. A partir desse dia eu comecei uma corrida para ser um atleta melhor, experimentar e buscar formas de amadurecer. Acho que tem horas que tem que treinar mais forte e também de modo mais inteligente", disse o campeão Pan-Americano.

Ele avisa que quer sempre o melhor resultado e o hino brasileiro tocando em cima do pódio. É isso que o empurra. "É difícil explicar o que é a cabeça de um competidor de um atleta de alto rendimento. A insatisfação constante. Tem a linha tênue do que é saudável ou não. Ninguém nunca vai me cobrar mais que eu mesmo".

Aos 30 anos, Fratus explicou que descansar também faz parte da estratégia hoje em dia. "Em algumas questões de preparação de competição, lido de forma diferente com a cobrança externa. A fome é a mesma de quando eu tinha 10, 11 anos de idade. Tenho a mesma vontade de me preparar. Uma coisa é conquistar e outra é ter vontade de construir isso e treinar. Até para isso entendo a importância de descansar.".

Ouro no Pan nos 50m livre era peso

Bruno Fratus itiu que a medalha de ouro do Pan que faltava pesava sobre ele. O nadador foi prata em Toronto-2015. "Lembro claramente do Pan de Toronto que não consegui ganhar a prova. Lógico que competi com um cara rápido (o americano Josh Schneider). Mas eu fiquei: Cesar [Cielo] ganhou em 2007, 2011 e eu não consegui manter a hegemonia do Brasil. Eu senti que estava devendo. Agora estou feliz e aliviado", comentou.

Mas, apesar do alívio, ele ressaltou que o dia de dourado não garante medalha olímpica no peito em 2020. "Cada prova é uma prova. Ano que vem tem seletiva e se não treinar, vai ficar de fora das Olimpíadas. Eu fui vice do Mundial há semanas [nos 50m livre], mas não está garantido que lá em Tóquio vai ter uma medalha com meu nome."