;(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();
})();
De 'xerecou' a 'viaaado'. Os melhores momentos de Karen Jonz nas Olimpíadas
Karen Jonz virou sensação na web
Reprodução/Instagram
Colaboração para o UOL, em Santos (SP)
26/07/2021 16h19
Se você também já se apaixonou pela Karen Jonz, o seu lugar é aqui, nessa matéria! A comentarista da SporTV vem sendo um show à parte nas Olimpíadas de Tóquio e, se antes era pouco conhecida pelo público em geral, agora certamente já possui uma legião de fãs.
Imagem: Transmissão
Continua depois da publicidade
Para quem ainda não sabe de quem estamos falando, Karen Jonz é tetracampeã mundial de skate, artista, musicista e youtuber, além de ser a primeira mulher e skatista brasileira campeã mundial de skate vertical e também responsável pelo primeiro ouro brasileiro feminino no X-Games... Ufa!
Bom, mas vamos parar de escrever e bora para o que realmente interessa? Agora, com vocês, os melhores momentos de Karen Jonz nas Olimpíadas! Ou alguns deles, vai... Afinal, já foram muitos, né?
"mano que trouxa ela ficou parecendo um peixe morto ali de propósito pra matar todo mundo do coração, aí depois, a era pegadinha"
E, é claro, a nova expressão mais usada pelos brasileiros nos últimos dias... (pra você que não entendeu o significado, basta dar uma olhadinha no vídeo)
Mas calma lá! Karen Jonz também fala sério nas transmissões, e muito sério. O que dizer do comentário dela sobre Alana Smith, skatista americana que recentemente se declarou não binário...
Continua depois da publicidade
A gente aqui está pesquisando sobre pronomes pois, logo mais na terceira bateria, ela entra e, vocês desculpem se a gente cometer alguns erros...
Acredito que muita gente não saiba também, e é importante estarmos vendo isso nos Jogos Olímpicos, alguns atletas não binários, muitos atletas LGBT
Teve um pouco de aula sobre feminilidade também...
E além de falar sério, é claro que ela também representa todo Brasil quando o assunto é emoção, né? Assim como nós, ela não se controlou com a medalha de prata da nossa pequena Rayssa e disse que a vitória dela 'muda o mundo'.
Isso mostra o que uma menina é capaz, o Brasil está sorrindo com o segundo lugar da Rayssa. Isso muda o mundo. A gente chorou um monte, foi muito emocionante.
Continua depois da publicidade
É isso, espero que tenham gostado. E para quem só tá acostumado a vê-la na telinha, aqui vai uma foto de quando ela 'destruía' nas pistas de skate pelo mundo:
ID: {{comments.info.id}}
URL: {{comments.info.url}}
Ocorreu um erro ao carregar os comentários.
Por favor, tente novamente mais tarde.
{{comments.total}} Comentário
{{comments.total}} Comentários
Seja o primeiro a comentar
Essa discussão está encerrada
Não é possivel enviar novos comentários.
Essa área é exclusiva para você, , ler e comentar.
Só s do UOL podem comentar
Ainda não é ? Assine já.
Se você já é do UOL, faça seu .
O autor da mensagem, e não o UOL, é o responsável pelo comentário. Reserve um tempo para ler as Regras de Uso para comentários.