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

Término de casal, 'baixaria' e intolerância repercutem hoje no BBB 23

BBB 23: MC Guimê, Bruna Griphao e Aline Wirley em momentos de tensão - Reprodução/Globo
BBB 23: MC Guimê, Bruna Griphao e Aline Wirley em momentos de tensão Imagem: Reprodução/Globo

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

23/01/2023 17h44

A formação do primeiro Paredão e uma intervenção de Tadeu Schmidt alugaram espaço na cabeça dos brothers no BBB 23 (Globo), que hoje repercutiram os acontecimentos em um dia tenso.

Confira os momentos mais marcantes da manhã e tarde a seguir:

Gabriel e Bruna refletem após 'bronca'

Após receberem uma chamada de atenção de Tadeu Schmidt durante o programa ao vivo, Gabriel e Bruna Griphao tiveram de repensar a relação.

BBB 22: Gabriel confessa sentimentos após recado de Tadeu Schmidt - Reprodução/Globoplay - Reprodução/Globoplay
BBB 22: Gabriel confessa sentimentos após recado de Tadeu Schmidt
Imagem: Reprodução/Globoplay

Key cutuca a ferida

Enquanto a casa ainda refletia sobre a fala de Tadeu, Key Alves provocou a rival Bruna Griphao com um torpedo direcionado a Gustavo. Ela agradeceu o cowboy por respeitá-la.

Aline e Nicácio tentam conciliação

Distantes desde que Aline Wirley e Bruno colocaram Fred Nicácio e Marília no Castigo do Monstro, os dois camarotes tentaram novamente se entender. Eles tiveram uma conversa longa à sós que, apesar de amigável, fez Aline chorar sozinha no Quarto Deserto logo depois.

BBB 23: Aline diz que tentou proteger brother - Reprodução/Globoplay - Reprodução/Globoplay
BBB 23: Aline diz que tentou proteger brother
Imagem: Reprodução/Globoplay

Guimê aponta intolerância religiosa

Enquanto Nicácio resolvia uma intriga, outra surgia em outro lado da casa. De manhã, MC Guimê disse aos amigos do Quarto Deserto que o médico foi intolerante com ele.

  • Após a prova Bate e Volta, Guimê disse que Gabriel escapou do Paredão porque Deus queria dar-lhe uma segunda chance;
  • Fred Nicácio, que perdeu a prova, discordou e disse que Gabriel foi salvo por suas próprias habilidades, não por Deus;
  • Guimê disse que Fred foi intolerante com sua fé em Deus: "Se ele não acredita, eu quero que se f*da".

Fred e Marília lideram votos para Quarto Secreto

O médico e a maquiadora são os mais cotados para a falsa eliminação de amanhã, com mais de 71% dos votos contra 28% de Gustavo e Key.

Enquete UOL BBB 23: Qual dupla você quer mandar para o Quarto Secreto?

Enquete encerrada

Total de 99202 votos
72,27%
Reprodução/Globoplay