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

Kahena/Martine sobe para 3º na 49erFX; Scheidt tem chance remota de medalha

Martine Grael e Kahena Kunze em ação nas Olimpíadas de Tóquio - Carlos Barria/Reuters
Martine Grael e Kahena Kunze em ação nas Olimpíadas de Tóquio Imagem: Carlos Barria/Reuters

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

30/07/2021 05h32

O veterano Robert Scheidt, em sua sétima participação olímpica, confirmou nesta sexta-feira que vai para a Medal Race, a final da vela, lutando por uma medalha. As chances, porém, são remotas, após ele cair para a sexta colocação no geral após as duas regatas do dia. A regata que define o pódio está marcada para o próximo domingo (1) na baía de Enoshina, onde está sendo disputada a competição de vela dos Jogos Olímpicos de Tóquio-2020.

Para o Brasil, o ponto alto veio com as atuais campeãs olímpicas da classe 49er FX, Kahena Kunze e Martine Grahel. A dupla venceu uma das três regatas disputadas hoje e agora ocupam o terceiro lugar na classificação geral. A 49er FX, porém, prevê mais três regatas amanhã (31) antes da definição dos dez barcos finalistas.

49er FX: brasileiras a seis pontos da liderança

Martine e Kahena brilharam hoje na primeira regata do dia. As duas lideraram desde o início e marcaram sua segunda vitória em Tóquio. As duas outras regatas do dia, porém, marcaram problemas. As brasileiras largaram mal em ambas. Na segunda, ainda conseguiram se recuperar e fechar em sexto lugar, após recuperação nas últimas duas pernas da prova. Na terceira, porém, chegaram em 11º.

Com os resultados, elas somam 47 pontos perdidos. A liderança é das holandesas Annemiek Bekkering e Annette Duetz, com 41 pontos. O segundo lugar é de Tamara Echegoyen Domingues e Paula Barcelo Martin, da Espanha, com 42 pontos.

Scheidt: chances de medalhas são remotas

Dono de cinco medalhas olímpicas, duas delas de ouro, Robert Scheidt confirmou que, pela sétima Olimpíada seguida vai ao último dia lutando por medalha —no Rio de Janeiro, ele terminou em quarto lugar, na única edição dos Jogos até agora em que saiu sem subir ao pódio. Em Tóquio, porém, as coisas ficaram difíceis depois de hoje. Ao marcar um 24º e um 16º lugares, ele caiu do quarto para o sexto lugar.

Scheidt vai para a última regata, com dez barcos e em que a pontuação é dobrada, com 86 pontos. Ainda há chances matemáticas para ser medalhista de prata, mas, para isso, é necessário vencer a Medal Race e fazer com que seus rivais, o norueguês Hermann Tomasgaard (71), o croata Tonci Stipanovic (74) e o cipriota Pavlos Kontides (76), fiquem entre os quatro últimos colocados mantendo essa ordem. O bronze também é possível, mas também depende de, por exemplo, um segundo lugar e que dois dos seus rivais fiquem entre os quatro últimos colocados (desde que o norueguês não seja um deles, por exemplo).

O ouro, aliás, já é do australiano Matt Wearn, com 49 pontos perdidos —para isso, ele só precisa largar no domingo.