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

Olhar Olímpico

Thiago Braz prefere ficar na Itália e amarra vara em árvore para treinar

11/04/2020 04h00

Já classificado para a Olimpíada de Tóquio, Thiago Braz tem mais de um ano e três meses de preparação para defender a medalha de ouro conquistada no Rio. O adiamento dos Jogos não mudou os planos dos brasileiros, que estava em um camping na Itália quando o país se tornou o principal foco do novo coronavírus. Apesar das proibições de sair de casa, ele não tem planos para voltar ao Brasil, para perto da família, e está tendo que se virar para manter os treinos no grande quintal da casa onde está morando.

"A intenção era permanecer na Itália para ter o mesmo ciclo de quando conquistei o ouro olímpico. Infelizmente, o que não imaginava, aliás, nunca imaginei, é que pudéssemos viver um momento tão complicado e que poderia correr o risco de ficar sem treinar por meses. Apesar de estarmos na Itália, quando toda essa situação ficou mais alarmante, resolvemos permanecer no mesmo local, ao lado do meu técnico", explicou Thiago Braz, ao Olhar Olímpico.

Durante a maior parte da carreira, Thiago treinou e morou em Formia, ao sul de Roma, onde o treinador ucraniano Vitaly Petrov tem seu centro de treinamento. No fim de 2018, porém, o saltador decidiu voltar a morar no Brasil, em São Paulo, para ficar perto da família, especialmente dos avós, que o criaram. O planejamento era que ele voltasse a Formia na reta final da preparação olímpica, permanecendo lá durante o primeiro semestre de 2020.

As coisas começaram a ficar mais difíceis quando o centro de treinamento foi fechado, no último dia 14 de março, por determinação das autoridades locais. Nos dias anteriores, com as restrições de circulação, Thiago e outros atletas chegaram a morar no CT para poderem treinar. O Comitê Olímpico do Brasil (COB), que banca os treinamentos de Thiago na Itália, chegou a oferecer a ele a oportunidade de voltar ao Brasil, o que o saltador recusou. Segundo ele, a decisão de ficar na Itália foi tomada em conjunto com o próprio COB e com a Confederação Brasileira de Atletismo (CBAt).

"Recusei, porque não era o momento de voltar no meio desta pandemia. Jamais me colocaria em risco e também não colocaria a vida de outras pessoas. Além disso, nós não sabíamos ainda o que seria decidido em relação aos Jogos Olímpicos. E agora, mesmo sabendo que não teremos os Jogos Olímpicos, a intenção continua a mesma: me preparar da melhor maneira possível para voltar aos treinos diários, com a melhor forma física possível", argumenta.

Thiago é rara exceção no esporte brasileiro. O COB fez um mapeamento de todos os atletas "olímpicos" que estavam fora do país e os auxiliou a retornar. Gabriel Constantino e Alison dos Santos, que estavam em camping nos Estados Unidos, foram os últimos. De resto, só permaneceram no exterior atletas com residência fixa lá por defenderem clubes locais, especialmente em modalidades coletivas, como vôlei, basquete e handebol. O saltador, porém, quis continuar na Itália.

Morando próximo ao centro de treinamento, ele continua tendo contato diário com o técnico Vitaly Petrov e com o filipino Ernest Obiena, atual campeão asiático. O quintal comum foi adaptado para receber treinamentos. Uma vara foi amarrada entre duas árvores para que os atletas treinassem os movimentos finais do salto. Sair de casa, só para ir ao supermercado e à farmácia, como no restante do país.