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

Juliette divulga capa de seu primeiro EP

Juliette Freire divulgou a capa de seu primeiro EP - Reprodução/Instagram
Juliette Freire divulgou a capa de seu primeiro EP Imagem: Reprodução/Instagram

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

01/09/2021 11h10Atualizada em 01/09/2021 14h23

Juliette Freire divulgou a capa de seu primeiro EP, lançado amanhã em todas as plataformas de streaming.

Chegou a hora de assumir a minha melhor faceta. Conheçam a capa do meu sonho! A música sempre foi o meu refúgio, ela me leva a lugares lindos... Aqui estou eu! Meu EP estará disponível amanhã em todas as plataformas de streaming. Com amor, Juliette.

Mais cedo, Juliette havia divulgado esta imagem como capa de seu EP, mas apagou a publicação e refez com a imagem correta. - Reprodução/Twitter - Reprodução/Twitter
Mais cedo, Juliette havia divulgado esta imagem como capa de seu EP, mas apagou a publicação e refez com a imagem correta.
Imagem: Reprodução/Twitter

Mais cedo, ela havia divulgado outra imagem como capa do álbum, mas acabou excluindo a publicação de suas redes sociais e divulgando, em seguida, a capa correta.

Algumas pessoas chegaram a apontar a semelhança da primeira capa com imagens de discos de outros cantores.

O EP da campeã do "BBB 21" está sendo desenvolvido por um time de paraibanos, conhecidos no cenário musical brasileiro. Será o primeiro trabalho musical da paraibana depois de ser contratada pela Rodamoinho Records, em parceria com a Virgin Music Brasil.

Na semana ada, Juliette trocou suas fotos de perfil nas redes sociais para um tom pastel de laranja, e os fãs ficaram ansiosos por sua "nova era".

Ela já mostrou os seis possíveis nomes das músicas do seu EP: "Bença", "Diferença Mara", "Doce", "Sei Lá", "Benzim" e "Vixe Que Gostosa".

Música no BBB

No reality, a paraibana chamou atenção ao soltar a voz com várias músicas. Entre elas "Deus Me Projeta", de Chico César, "Dona Cila", de Maria Gadú, e "Bixinho", de Duda Beat.

Ao sair da casa mais vigiada depois de receber o prêmio, ela participou de uma série de lives. Juliette cantou ao lado de Gilberto Gil, Wesley Safadão, Alceu Valença, Elba Ramalho e Xand Avião.

Na semana ada, ela apareceu, mais uma vez, ao lado de Safadão para uma participação na edição deste ano do "Criança Esperança". Os dois cantaram o clássico "Anunciação" em uma performance gravada em Quixadá, no Ceará.