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

Militar e discreto: quem é Lucas Souza, o novo namorado de Jojo Todynho

De Splash, em São Paulo

01/12/2021 04h00Atualizada em 01/12/2021 13h07

Jojo Todynho está em um novo relacionamento. A cantora não queria revelar o namoro tão cedo, mas acabou sendo "exposta" e decidiu assumir a relação com o oficial do exército Lucas Souza.

Na segunda-feira, ela contou que postou uma foto com o namorado em uma conta privada para apenas 100 pessoas. A imagem foi "vazada" pelos próprios amigos permitidos no perfil secreto, o que não agradou em nada a campeã de "A Fazenda 12" (RecordTV).

"Na inocência, postei [as fotos] no perfil privado, que tem 100 pessoas. Pessoas de quem eu gosto, que eu tenho contato pessoal. Não imaginava que iria vazar. Isso prova que eu tenho que ficar cada vez mais afastada dos outros", disse Jojo nos Stories.

Ontem, ela voltou a rebater críticas por Lucas ser branco. "Estão me chamando de 'palmiteira'. O amor não tem cor. E obrigada pelo tenente bonitão, porque ele é mesmo. Bonito e gostoso", afirmou a funkeira. Saiba mais sobre o novo namorado de Jojo:

Oficial

Segundo o jornal "Extra", Lucas ingressou nas Forças Armadas em janeiro do ano ado, em Curitiba, sua cidade natal. Ele também é estudante de engenharia civil.

O militar teria conhecido Jojo em Cancún, no México, em agosto. Nesse meio tempo, a cantora se relacionou com outro rapaz chamado Márcio Felipe. O envolvimento acabou no mês ado, quando Jojo itiu ter "vacilado" com Márcio em viagem à Paris.

Jojo já conheceu a família dele

Jojo e a família de Lucas - Reprodução/Facebook - Reprodução/Facebook
Jojo e a família de Lucas
Imagem: Reprodução/Facebook

Nos comentários da postagem com Lucas no Instagram, Márcia, sogra de Jojo, recebeu muito bem a nova nora. "Seja muito bem-vinda à família", escreveu. Mostrando já estar bem entrosada com ela, a cantora se declarou: "Te amo", disse à mãe de Lucas.

Jojo já foi conhecer a família do namorado no Paraná. No perfil de Márcia, há várias fotos da cantora com seus novos familiares.

Discreto

Lucas parece ser bem discreto. Ele tinha perfil no Instagram fechado para poucas pessoas e, com a repercussão do namoro com Jojo, acabou desativando a conta na rede social.

"Lucas não precisa de mídia. Se ele precisasse, o Instagram dele seria aberto. Ele é oficial, então obviamente não precisa do meu dinheiro e de biscoito. Aliás, nunca dei dinheiro para homem", disse a cantora nos Stories.