;(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 foge de zumbis e se arrisca no 'emo'; veja clipe de 'Boys Don't Cry'

Anitta lança clipe da música "Boys Don"t Cry" - Reprodução/YouTube
Anitta lança clipe da música "Boys Don't Cry" Imagem: Reprodução/YouTube

De Splash, em São Paulo

27/01/2022 21h41Atualizada em 27/01/2022 22h00

A cantora Anitta lançou hoje, ao mesmo tempo, a música e o clipe de "Boys Don't Cry". Os fãs exaltaram o novo trabalho que, diferente dos lançamentos anteriores, traz zumbis e uma pegada 'emo'.

O novo clipe traz referência de clássicos do pop, como "Harry Potter", "Titanic", "Beetlejuice", "Priscilla: Rainha do Deserto", "Noiva em Fuga" e "Meu Namorado é um Zumbi". Anitta assina a direção em parceria com Christian Breslauer.

A música tem produção do sueco Max Martin — considerado pela revista Billboard como o maior produtor musical do século. Ele também é responsável por "...Baby One More Time", de Britney Spears, e "Blinding Lights", do The Weeknd.

Momentos antes da divulgação no YouTube, Anitta destacou ser o "clipe da carreira" em publicação feita no Twitter.

Confira o clipe de 'Boys Don't Cry', nova música de Anitta

Elogios nas redes sociais

Fãs e amigos da cantora elogiaram o clipe em publicações feitas no Twitter. "Incrível", destacou Juliette, vencedora do "BBB 21". "Está tudo perfeito", analisou um dos iradores.

"É incrível como a Anitta consegue se reinventar e chocar seu público mesmo após 10 anos de carreira. É a maior do Brasil", analisou uma seguidora da artista.

Bastidores

Segundo informações divulgadas pela equipe de Anitta, os figurinos do clipe foram pensados pela espanhola Sita Abellan, que trabalha como "styling" do cantor J Balvin. A inspiração em um universo punk também foi idealizada pela estilista britânica Vivienne Westwood.

Primeiro lançamento de Anitta em 2022, Boys Don't Cry chega após o sucesso das faixas "No Chão Novinha", funk em parceria com Pedro Sampaio, "Envolver" e "Faking Love".