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

ANÁLISE

Demi Lovato chega ao Rock in Rio na versão mais roqueira da carreira

Demi Lovato se apresenta no Espaço Unimed, em São Paulo - Angelo Kritikos/Divulgação
Demi Lovato se apresenta no Espaço Unimed, em São Paulo Imagem: Angelo Kritikos/Divulgação

De Splash, em São Paulo

04/09/2022 04h00

O Rock in Rio já aprendeu a lição do ado e adotou a prática de separar as atrações ao longo dos dias de shows por "atmosfera musical", na expressão da executiva Roberta Medina, prevenindo problemas do ado, com o estranhamento dos fãs do clássico rock'n roll com as atrações de outros estilos incorporadas ao longo das edições ao festival.

Os metaleiros tiveram seu dia de dominar a Cidade do Rock, com Iron Maiden e Dream Theater na sexta-feira. Curiosamente hoje, que é o dia do pop, uma das principais atrações trará ao palco a sua versão mais roqueira desde o início da carreira.

Lançada no celeiro de talentos da Disney, Demi Lovato já vinha adotando uma estética mais própria do rock em seus últimos trabalhos, mas nada comparado ao que veio na esteira de "Holy Fvck", seu primeiro lançamento após superar um período de crise com o vício em drogas. As experiências pessoais transpõem para as letras e ela coloca os dedos nas feridas.

Antes de desembarcar no Rio de Janeiro, a cantora fez duas apresentações em São Paulo, no Espaço Unimed. No palco, a Demi Lovato que chegou ao Brasil e que estará hoje no Rock in Rio é uma cantora com estética roqueira, no jeito de se vestir e se portar, na montagem mais simplista do palco e no foco total ao poder das letras.

Na turnê, Demi conta com uma banda de apoio formada inteiramente por mulheres, com a guitarrista Nita Strauss, que por oito anos tocou com Alice Cooper — um artista que facilmente poderia estar em um dos dias reservados ao rock no festival.

As artistas acompanham a proposta da turnê e dão roupagem mais para o rock até para antigas músicas da fase pop, como "Heart Attack". O que não muda é o talento vocal de Demi Lovato, que sempre esteve fora da curva entre as estrelas teens da sua geração, com voz potente, limpa e afinada.

O show de Demi Lovato no Rock in Rio acontece neste domingo, às 20h35, e pode ser assistido ao vivo pela internet. No Palco Mundo, Jota Quest e Iza tocam antes e Justin Bieber se apresenta depois da cantora, fechando o terceiro dia do festival.

Ligação com o Brasil

O novo álbum de Demi Lovato se tornou um sucesso por aqui de forma rápida e consistente, o que se observava desde os primeiros singles da nova fase — "Substance", lançada em julho, foi mais reproduzida aqui do que em qualquer lugar do mundo.

"Antes de tudo, sou tão grata aos meus fãs brasileiros. O apoio deles significa o mundo para mim", afirma Demi, em entrevista a Splash. "A paixão que eles [brasileiros] demonstram com as minhas músicas, nos meus shows, é algo que eu nunca poderei expressar o quão grata eu sou."