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

Anitta faz aniversário e dá 'spoiler' do álbum: 'Nada de português'

Anitta em ensaio para a revista mexicana EstiloDF - Reprodução/Instagram
Anitta em ensaio para a revista mexicana EstiloDF Imagem: Reprodução/Instagram

De Splash, em São Paulo

30/03/2021 09h12Atualizada em 30/03/2021 09h29

A cantora Anitta faz aniversário hoje e acabou revelando alguns detalhes do seu novo álbum "Girl From Rio" em entrevista à revista mexicana EstiloDF.

Anitta disse que as faixas terão surpresas e serão em outros idiomas, como ela tem focado já algum tempo em músicas em espanhol e em inglês.

Tem novidades nele, em que estou cantando em inglês, um pouco de espanhol e nada de português. Às vezes, é complicado conseguir números grandes quando se propõe algo diferente e novo

Ela posou de maiô para a edição da revista aos 28 anos de idade. A funkeira já vinha compartilhando cliques da sua viagem ao Caribe e usando roupas de banho.

Mesmo sem português, ela promete ter a cara do Brasil nas faixas.

"Vai ser muito mesclado porque terá muitos ritmos da cultura brasileira e também o que está com muito foco agora no mercado internacional. Acho que vai ser uma nova proposta para que as pessoas conhecem novas influências ritmos", disse ela, que tem expectativa de ter boa recepção do público.

Anitta afirmou que as parcerias foram pensadas para ter uma ligação com a letra. Ela descartou que os nomes são escolhidos apenas por estarem fazendo sucesso.

"As parcerias não devem ser feitas só por fazer, elas devem mostrar uma conexão entre quem canta. Não vou chamar alguém para cantar comigo só porque está na moda", completou.

Ela afirmou que, de todos os feats que já produziu, "Downtown, com J. Balvin é a que guarda com mais carinho.

Cada colaboração me ajudou de uma maneira diferente e é por isso que tenho consideração por todas

A funkeira ainda lembrou da discussão que teve com o cantor Arcangel depois de um comentário machista. Anitta o repreendeu publicamente e disse que conversou com ele após o episódio.

"Sinto que esse tipo de pensamento são consequências de um tipo de educação e de uma sociedade que permite essas coisas. Não acredito que ele seja uma má pessoa, vejo que a sociedade em geral faz esses comentários, sem se dar conta no que implicam. É importante levantar a voz para que as pessoas vejam que isso não está bem", disse.