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

Johnny Hooker sugere encerrar carreira, mas volta atrás: 'Pedido de ajuda'

Johnny Hooker desabafa sobre desempenho da carreira - Reprodução/Instagram
Johnny Hooker desabafa sobre desempenho da carreira Imagem: Reprodução/Instagram

De Splash, no Rio

21/05/2022 22h02

O cantor Johnny Hooker, de 34 anos, usou o Twitter na madrugada de hoje para fazer um desabafo sobre o desempenho de seu último lançamento, a música "CUBA". Em determinando momento, ele chegou a sugerir que poderia encerrar carreira, mas voltou atrás horas depois.

"Para um artista existir e sobreviver sem apoio de nenhum lado precisa ter demanda orgânica, e os números do 1º dia de lançamento de CUBA deixam claro isso. Não há mais demanda pelo meu trabalho. Se é que houve um esboço de alguma algum dia. É preciso saber a hora de se retirar", começou o artista.

"Não foi uma batalha em todo perdida, consegui driblar o poder econômico várias vezes. Tenho 2 discos de platina e 250 milhões de streams orgânicos para provar isso. Fica o legado também, arte é para sempre. Mas a gente tem que manter a dignidade também", continuou ele.

Apesar da mensagem, ele revelou que seguia com o plano de lançar um álbum completo no próximo mês. "Antes do fim ainda tem um disco novo inteiro que sai em algumas semanas! Obrigado por tudo! Amo vocês", prosseguiu o pernambucano.

Horas depois, após a repercussão dos tuítes, ele agradeceu o apoio recebido e voltou atrás em relação a se retirar do cenário musical. "Amores, obrigado pelas mensagens de amor e carinho que inundaram por aqui, o meu desabafo não foi por ingratidão com tudo que já conquistei (que foi muita coisa por sinal), Às vezes, é só um pedido de ajuda mesmo e um lembrete de que ainda estou aqui vivo, produzindo música FOD*, lutando contra forças inimagináveis, tendo que provar um milhão de vezes que eu sou fod* para conseguir migalhas. Sei que a maioria entendeu. Enfim, recebam todo meu amor de volta", finalizou.

Há algumas semanas, o artista já havia feito outro desafabo sobre a carreira, pois estava sem dinheiro para pagar o aluguel. "Fiz cinco shows abarrotados de gente em abril. Mal deu para pagar as contas do mês. Crianças, não façam música", disse.

Em tom de brincadeira, ele pediu que os jovens invistam no TikTok e em serem celebridade em eventos, pois assim vão conseguir ter dinheiro. "Invistam em TikTok e em aparecer em eventos! Ninguém gosta de música, as pessoas gostam de fofoca (risos)", afirmou.