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

Alicia Klein

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Richarlison coloca o Brasil no primeiro escalão da Copa do Qatar

Richarlison acerta lindo voleio e marca para a seleção contra a Sérvia pela Copa do Mundo do Qatar - Justin Setterfield/Getty Images
Richarlison acerta lindo voleio e marca para a seleção contra a Sérvia pela Copa do Mundo do Qatar Imagem: Justin Setterfield/Getty Images

24/11/2022 17h56

Receba os novos posts desta coluna no seu e-mail

Email inválido

O Pombo brilhou. Marcou no rebote, aos 17 minutos do segundo tempo, depois da bola que Vini Jr. praticamente roubou de Neymar. E, aos 28, meteu um golaço de voleio que concorrerá a um dos mais lindos da Copa. Uma pintura. O Pombo tem nove gols assinalados nas últimas sete partidas com a Amarelinha.

Brasil 2 x 0 Sérvia.

Foram 22 finalizações contra cinco dos adversários. Criou muito mais, defendeu bem, amassou os sérvios na segunda etapa.

Vini Jr. deixou claro porque é uma estrela. Paquetá não viveu seu melhor dia e foi substituído por Fred. Neymar saiu de campo chorando, com uma entorse no tornozelo.

O Brasil, como um todo, mostrou a que veio.

A Seleção já chegou favorita ao título, claro.

Mas depois de duas zebras gigantescas e algumas exibições de gala, divido os postulantes em três grupos, ao final dessa primeira rodada.

No porão, na lama, vivendo um drama: Argentina e Alemanha. Perderam para equipes de que não poderiam perder e têm embates dificílimos, no fim de semana, correndo o risco de uma eliminação vergonhosa e precoce.

Na média, sem decepção nem animação: Holanda. Fez o seu, não embasbacou ninguém.

Na ponta, liderando o pelotão, felizes e faceiros: Brasil, Espanha, França e Inglaterra. Guardadas as devidas proporções, contra adversários mais ou menos sólidos, mostraram força. Em alguns casos, deitaram mesmo.

Avançam com confiança aos próximos desafios.

Se vencer a Suíça (que hoje fez um joguinho feio contra Camarões), que tem os mesmos três pontos do Brasil, a equipe de Tite praticamente garante a classificação.

É cedo e ainda há bastante espaço para a zebra do deserto dar a cara, mas começar bem é o primeiro o para terminar bem.

** Este texto não reflete, necessariamente, a opinião do UOL