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

Ludmilla tem participação confirmada no The Town e no Rock in Rio

Ludmilla causou frisson com sua apresentação no Rock in Rio em 2022 - Reprodução/Instagram
Ludmilla causou frisson com sua apresentação no Rock in Rio em 2022 Imagem: Reprodução/Instagram

Colaboração para Splash

12/01/2023 23h05

O nome de Ludmilla, 27 anos, foi anunciado hoje nos festivais The Town e Rock in Rio. A cantora vai performar no Palco Skyline na primeira edição de The Town e no Palco Mundo na próxima edição do Rock in Rio, que ocorre somente em 2024.

Zé Ricardo, diretor artístico do The Town e do Rock in Rio, reforça que o anúncio de Ludmilla é um presente para os fãs nesse dia histórico de comemoração de aniversário do Rock in Rio.

"Ludmilla é hoje uma das maiores artistas brasileiras, que carrega, além de todo seu talento artístico, a representatividade de uma mulher preta, bissexual, de periferia e origens musicais no funk carioca. Ela hoje inspira a tantas pessoas a partir da construção da sua carreira épica de sucesso", festeja ele.

"Estamos muito felizes em anunciar, hoje, a sua participação nos palcos de ambos os festivais: no The Town, em setembro de 2023, e o nosso pontapé inicial para o Rock in Rio 2024", completa.

Um dos maiores nomes da música brasileira na atualidade, Ludmila fez um show histórico no Rock in Rio em 2022, como headliner do Palco Sunset, tornando-se a apresentação de maior audiência do Multishow entre os nacionais da edição, além de ter dominado as redes sociais do festival, conquistando a maior repercussão em todos os pontos, seja maior audiência, menções, citações. De quebra, ainda se tornou primeiro lugar nos trending topics Brasil e mundo.

Ela promete agitar o público de ambos festivais com os sucessos Rainha da Favela, A Danada Sou Eu, Deixa de Onda, Invocada, Verdinha e Hoje, entre outras faixas.

A esposa de Brunna Gonçalves, como se sabe, foi indicada duas vezes ao Grammy Latino - vencendo em uma delas, com seu quarto álbum de estúdio "Numanice 2" (2022). Foi também indicada seis vezes ao MTV Europe Music Award, como Melhor Artista Brasileiro, e diversas vezes ao Prêmio Multishow de Música Brasileira, saindo duplamente vitoriosa em 2019.