;(function() { /** * 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; // 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(); })();
PUBLICIDADE
Topo

Baby aplica ippon no golden score e avança às quartas de final do judô

Rafael Silva, judoca brasileiro - Divulgação/Time Brasil
Rafael Silva, judoca brasileiro Imagem: Divulgação/Time Brasil

Beatriz Cesarini

Do UOL, em Tóquio

30/07/2021 00h08

O judoca brasileiro Rafael Silva, o Baby, finalmente estreou nas Olimpíadas de Tóquio. Nos primeiros minutos desta sexta-feira (30), o atual sétimo colocado do ranking mundial venceu Ushangi Kokauri, do Azerbaijão, nas oitavas de final da categoria +100 kg. Com o resultado, o atleta de 34 anos avança às quartas para enfrentar Guram Tushishvili, da Geórgia.

Baby começou segurando forte na gola do judoki do adversário, movimento que foi devolvido. Kokauri tentou sem sucesso aplicar golpes no brasileiro por volta dos dois minutos do tempo regulamentar. Com isso, Baby acabou tomando uma punição por falta de combatividade.

No golden score, o confronto continuou parelho. Os dois judocas não conseguiam fazer ataques efetivos, e Baby tomou a segunda punição por falta de combatividade, mais uma e ele poderia ser desclassificado do combate.

Com o relógio sendo um adversário extra, Baby usou a experiência de quem já guarda duas medalhas olímpicas em casa. Mesmo atrás no placar, o brasileiro não se intimidou, conseguiu um ippon e venceu a luta, avançando às quartas de final.

Peso extra

Uma curiosidade sobre a estreia de Rafael Silva foi o peso batido pelo brasileiro na categoria. Apesar dos 160kg apontados anteriormente, na lista de entrada do torneio Baby aparecia com 180,5kg. Para se ter ideia da diferença para os adversários, ele tem 16,3 kg a mais que o romeno Vladut Simionescu, segundo mais pesado, com 164,2 kg.

judo - Reprodução - Reprodução
O brasileiro Rafael Silva, o Baby, bateu os 180kg em sua estreia nas Olimpíadas de Tóquio
Imagem: Reprodução