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

Lucas Souza confirma reconciliação e pede desculpas a Jojo: 'Imediatista'

Casamento de Jojo Todinho e Lucas Souza - Reprodução/Instagram @jojotodinho_ofc
Casamento de Jojo Todinho e Lucas Souza Imagem: Reprodução/Instagram @jojotodinho_ofc

De Splash, em São Paulo

09/10/2022 12h25

Lucas Souza publicou um vídeo pedindo desculpas a Jojo Todynho, neste domingo (9), e afirmou que os dois estão bem e continuam casados. O oficial do Exército havia comunicado o fim da união com a cantora, no sábado (8), por meio de um comunicado nas redes sociais.

"ando aqui para falar que está tudo bem. Está tudo bem entre mim e a Jojo também. A gente já conversou. Está tudo certo. Eu gostaria de pedir desculpas a ela publicamente. Me retratar publicamente. Falar que está tudo bem", começou.

Lucas ressaltou, ainda, que a atitude foi impensada e que vai ficar um tempo longe das redes sociais para cuidar da saúde mental. "Desculpas pela atitude imediatista, impensada que eu tive ontem. Eu vou ficar um pouco off. Vou tentar ficar bem psicologicamente."

Mais cedo, Jojo já havia anunciado que continuava casada. Por meio dos stories no Instagram, a cantora afirmou que "tem que mudar suas atitudes" e que só irá terminar a união com o marido caso um dos dois morra.

A cantora ainda detalhou que recebeu uma ligação da mãe, que "deu um tapa na cara" da vencedora de "A Fazenda 12", que afirmou ter a intenção de fazer mudanças na própria vida após a crise na relação com Lucas.

Marketing?

Jojo e Lucas  - Instagram/@lucassouza_ofl - Instagram/@lucassouza_ofl
Casal confirmou reconciliação
Imagem: Instagram/@lucassouza_ofl

Depois de confirmar o fim do casamento com Jojo Todynho na tarde de ontem, Lucas Souza apagou o anúncio que fez no Instagram, gerando especulações sobre uma possível estratégia de marketing do casal, que oficializou a união há oito meses, para divulgar seus trabalhos.

A teoria ganhou força depois que Lucas substituiu o texto em que falava sobre "a fase mais dificil de sua vida" por dois stories, com links para sites fora da rede social: Em um deles, com a legenda "motivo do término", o militar encaminha os seguidores para o vídeo da música "Bangu", lançamento mais recente de Jojo. No outro, intitulado "motivo da separação", os curiosos vão parar no canal de Lucas no Youtube, ainda sem nenhum conteúdo publicado.