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

Olimpíadas: Ana Patrícia e Rebecca são superadas por dupla da Letônia

Dupla brasileira formada por Ana Patrícia e Rebecca durante jogo contra a Letônia nas Olimpíadas - REUTERS/John Sibley
Dupla brasileira formada por Ana Patrícia e Rebecca durante jogo contra a Letônia nas Olimpíadas Imagem: REUTERS/John Sibley

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

28/07/2021 00h15

Ana Patrícia e Rebecca perderam a primeira em Tóquio nessa terça-feira (27), em jogo de altos e baixos contra a dupla Graudina e Kravcenoka, da Letônia. Com parciais de 15 a 21, 21 a 12 e 12 a 15, as brasileiras se recuperaram de um começo ruim, mas não conseguiram confirmar a reação. Na próxima sexta-feira, elas voltam à quadra para pegar Claes e Sponcil, dos Estados Unidos.

O resultado embolou o grupo, já que as europeias empataram com as brasileiras. A chave tem ainda as americanas, que venceram na estreia, e as quenianas Makokha e Khadambi, superadas por Ana Patrícia e Rebecca em seu primeiro compromisso. As duas primeiras colocadas avançam, assim como as duas melhores terceiras; as demais terceiras vão para repescagem.

O jogo começou com a dupla brasileira em pouca sintonia, errando es e tendo dificuldade de encaixar um bom ataque. Enquanto isso, a dupla letã jogava leve e logo abriu uma boa vantagem, mesmo com a deficiência nos saques. Ana Patrícia e Rebecca ensaiaram uma resposta, mas não encontraram forças para encostar no placar e viram as adversárias istrarem o set para fechar com tranquilidade.

Para a segunda parcial, as brasileiras voltaram com a confiança renovada e mostraram um outro jogo, mais agressivo e com um bom saque para dificultar a vida das adversárias. Ao abrir vantagem, a dupla do Brasil conseguiu manter a distância, segurando o ímpeto das letãs, que mostraram abatimento na reta final do set. Assim, Ana Patrícia e Rebecca tiveram facilidade para empatar o jogo.

O tie-break começou com bastante equilíbrio, mas, aos poucos, a Letônia foi mostrando mais eficiência e abrindo vantagem. As letãs pareciam se aproximar da vitória com facilidade, mas Ana Patrícia e Rebecca mostraram poder de reação e empataram na reta final. A resposta, no entanto, não foi suficiente, e as europeias conseguiram fechar o jogo.

Apesar da derrota, a classificação para a próxima fase segue em aberto. Com uma vitória e uma derrota, Ana Patrícia e Rebecca têm agora mais uma partida dentro do grupo para tentar vaga na próxima fase. No vôlei de praia, as duas melhores duplas de cada grupo avançam para a próxima fase, enquanto as terceiros colocadas de cada chave se enfrentam em uma espécie de repescagem. As duas melhores garantem vaga nas oitavas de final.

Cabeça na partida decisiva

Depois da partida, Ana Patrícia itiu que não teve o melhor desempenho na noite desta terça-feira. Apesar disso, ela afirmou que é hora de pensar na dupla americana, próximas adversárias das brasileiras.

"É bola para frente. Teremos um grande jogo agora contra a dupla dos Estados Unidos, já ganhamos e já perdemos delas", disse Ana Patrícia.

Rebecca avaliou que a dupla dos Estados Unidos tem "um jogo parecido" com o delas, o que faz com que o duelo entre elas "encaixe".

"Não vai ser fácil. Mas vamos estudar bem as duas para apresentarmos uma boa partida", concluiu Rebecca.