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

'Teta' ou 'bunda' e 'xereca na mesa': Karen Jonz volta a brilhar no skate

Karen Jonz soltou pérola na transmissão do skate park feminino - Transmissão
Karen Jonz soltou pérola na transmissão do skate park feminino Imagem: Transmissão

Do UOL, em São Paulo

03/08/2021 22h00Atualizada em 04/08/2021 01h21

O skate está de volta nas Olimpíadas de Tóquio, agora com as disputas do park, e novamente a comentarista Karen Jonz brilhou na transmissão do SporTV. Tetracampeã mundial, ela voltou a roubar a cena com muito conhecimento sobre o esporte e expressões que ficam longe (muito longe) do convencional na TV.

A principal "pérola" veio já na parte final das classificatórias, quando a japonesa Misugu Okamoto fez uma boa volta e praticamente garantiu vaga na final.

"Ela já chegou colocando a xereca na mesa e falando assim: é isso aqui, galera", disparou Jonz.

Antes, após a primeira bateria da classificatória do park feminino, Karen explicou o nome de um dos obstáculos na pista.

"Ali no meio, esse obstáculo redondo a gente chama de teta. Parece uma bunda, mas a gente chama de teta. O nome dele é teta. Quando vocês ouvirem falando, é isso mesmo", disse a skatista.

É claro que o obstáculo teta foi parar no Twitter. Não faltaram elogios para Karen, que já havia brilhado nas transmissões do skate street.

Ainda na transmissão de hoje, Karen Jonz mandou um beijo para Letícia Bufoni, que competiu no skate street feminino no início das Olimpíadas e mostrou que estava de casa fazendo os comentários 'embaixo das cobertas'.

"A Letícia Bufoni está assistindo a gente. Falei com ela antes da transmissão, e ela pediu para mandar um beijo. Um beijo, Letícia. Ela que está aí nas redes sociais o tempo inteiro, se vocês acompanham e sabem do que eu estou falando", afirmou a comentarista.

Após o final das transmissões do SporTV, a campeã mundial de skate se pronunciou sobre a repercussão de suas falas e disse que fica 'emocionada e descontrolada' durante as competições.