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

'Nunca imaginei acordar com um palmitinho', diz Jojo Todynho sobre noivo

Jojo Todynho foi pedida em casamento pelo noivo, Lucas Souza - Reprodução/Instagram
Jojo Todynho foi pedida em casamento pelo noivo, Lucas Souza Imagem: Reprodução/Instagram

Colaboração para Splash

21/01/2022 13h53

A cantora Jojo Todynho, 24 anos, abriu o coração a respeito do noivado com o militar Lucas Souza, 21. Em entrevista ao podcast "Bulldog Show", ela deu detalhes de como começou o relacionamento com o rapaz - e do receio que sentia em se envolver com ele.

"A minha história com o Lucas é muito bonita, porque em meio a tantas coisas o amor sempre venceu. Eu falo pra ele que se não acontecesse o que aconteceu com a gente, não estaríamos junto hoje", começou a intérprete de "Que Tiro Foi Esse?".

"As pessoas ficam chamando ele de palmito, mas eu mesma já falava isso. Nunca imaginei que iria acordar com um palmitinho atrás de mim", ite Jojo.

Os dois se conheceram em agosto do ano ado durante uma viagem a Cancun, no México. "Quando voltei para o Brasil, eu estava completamente apaixonada por ele. Fiquei pensando em como eu iria me libertar desse garoto. Aí eu arrumei o mister TikTok [Márcio Felipe], deu merda que a ficante disse que foi traída e aí o povo me chamou de vagabunda e de um monte de coisa na internet."

"Se eu tô levando fama sem deitar na cama, agora eu vou deitar. Pra afrontar o Lucas, porque eu queria que ele me esquecesse, eu fiquei com o mister TikTok. Mas todo dia eu me perguntava o que eu estava fazendo da minha vida", diverte-se a campeã de "A Fazenda 12", ao relembrar da polêmica.

Quatro meses depois de conhecer Lucas, Jojo foi pedida em casamento por ele. Mas, antes de mergulhar de cabeça, Jojo confessa que teve medo dos ataques que ele poderia sofrer por estar com uma mulher fora dos padrões de beleza impostos pela sociedade.

"Eu estava apaixonada por ele, mas não queria que ele se apaixonasse por mim. O Lucas é militar e, lá em Cancún, me contou que a ex dele era uma miss. Querendo ou não, a gente vive num país muito preconceituoso. É complicado para uma mulher fora do padrão e preta", explica.

"Nunca usei minha cor, meu biotipo para me vitimizar, porque eu não sou dessas. Eu quebro logo o pau e resolvo o problema. Eu ficava pensando nele, pelo o que ele poderia ar. Nessa, eu queria fugir dele e que ele fugisse de mim. Eu gosto dele, mas não quero que ele goste de mim, porque isso é ageiro. Aí deu merda eu tive que ficar com o mister TikTok", continuou

Nesse meio tempo, em setembro, Jojo foi convidada da grife Jean Paul Gaultier para participar do Paris Fashion Week, mas a visita da funkeira na capital sa rendeu muito mais.

"Eu fiquei com uma pessoa lá, que eu não poderia perder a oportunidade, era único. Não vem com essa história de Neymar e Cauã Reymond, que não foi. Quando lá era 22h e aqui 2h, eu liguei pro Lucas e não falava nada, eu estava muito louca, tinha perdido o nome lá", recorda.

"No dia seguinte, ele me mandou uma mensagem dizendo: 'você tá se enganando e me fazendo sofrer. Você tem um dia pra resolver tua vida'. Virei pro mister TikTok e brinquei: 'ô, a casa caiu, hein'. Eu não ia perder o amor da minha vida. O amor sempre vence, né?", concluiu a jovem apaixonada.