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

Após show, Rebeca Andrade comemora "decisões inteligentes" e três finais

Rebeca Andrade deu show em apresentação no solo - Ricardo Bufolin/CBG
Rebeca Andrade deu show em apresentação no solo Imagem: Ricardo Bufolin/CBG

Demétrio Vecchioli

Colunista do UOL, em Tóquio

25/07/2021 10h54

Com uma qualificação para guardar na memória, neste domingo (25), a ginasta Rebeca Andrade comemorou bastante ter alcançado três finais na ginástica feminina nas Olimpíadas de Tóquio. Nos próximos dias, a brasileira vai brigar por medalhas no solo, salto e no individual geral.

"A gente treina bastante para dar nosso melhor em poucos minutos, poucos segundos, que duram nossas séries. Foi muito trabalho envolvido. A equipe multidisciplinar, nosso treinador, todos tomando decisões inteligentes em todos os momentos nos treinamentos, nas competições", disse a brasileira. "Eu estou bem feliz, gostaria de estar em mais finais, mas acontece. É um dia de cada vez, um dia após o outro. Foi um ano muito difícil e eu consegui fazer boas apresentações."

As boas apresentações de Rebeca Andrade também significam uma enorme superação. A ginasta já ou por três cirurgias de joelho, a última delas em 2019. Se as Olimpíadas tivessem sido disputadas em 2020, seria muito difícil que Rebeca chegasse aos Jogos - ela ainda precisava conquistar a vaga, já que o Brasil não conquistou a classificação por equipes. O adiamento acabou beneficiando a ginasta, que conseguiu se recuperar, conseguiu a vaga individual em junho e está em plena forma no Japão.

Até por todo esse histórico, Rebeca foi um grande ponto de apoio para Flávia Saraiva, que lesionou o tornozelo direito e não conseguiu finalizar sua participação na qualificatória - ainda assim, Flavinha se classificou para a final da trave, mesmo lutando com o problema há mais de dois meses.

"A gente treina junto todos os dias", disse Rebeca, sobre a amiga e companheira de clube, o Flamengo. "Eu vi o tanto que ela teve que correr atrás, o tanto de treino que ela perdeu. A gente tem que ter a cabeça muito firme", contou.

A experiência com lesões ajudou no consolo à colega e, também, no foco para sua própria competição. "Agora estou mais madura, com mente mais forte. Eu estava muito triste, mas precisava me concentrar", disse Rebeca, já que Flávia se machucou no solo exatamente antes de sua apresentação. "No momento que entrei no solo eu só estava pensando na minha série. Antes eu pensei na Flávia, depois eu pensei na Flávia, mas na ginástica temos que estar concentrada."