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

Justin Bieber não vai ao Grammy; The Weeknd anuncia boicote 'para sempre'

Justin Bieber e The Weeknd: fora do Grammy 2021 - Reprodução/Instagram
Justin Bieber e The Weeknd: fora do Grammy 2021 Imagem: Reprodução/Instagram

Colaboração para o Splash, em São Paulo

12/03/2021 07h10

Justin Bieber anunciou que não irá ao Grammy de 2021. A decisão foi tomada depois do cantor ter recebido quatro indicações nas categorias Pop por seu álbum, "Changes", o que ele considerou errado — segundo Bieber, o trabalho deveria ser classificado como R&B.

Segundo o site "Page Six", Bieber estaria chateado com a decisão da Recording Academy, organizadora do prêmio que será entregue no domingo, por conta da classificação equivocada de seu trabalho.

"Não ser colocado nessa categoria parece estranho, considerando desde os acordes, as melodias, o estilo vocal, até a bateria de hip-hop escolhida, é inegavelmente, inconfundivelmente um álbum de R&B!", afirmou o cantor canadense, de 27 anos.

Assim que as indicações foram anunciadas, ele há havia mostrado sua insatisfação pelo Instagram: "Por favor, não pensem que estou sendo ingrato, esses são apenas meus pensamentos. Obrigado por quem lutou para eu ter qualquer uma das nomeações", começou ele. "Eu estou lisonjeado em ter minha arte reconhecida. Eu sou muito meticuloso com minha música. Com isso dito, eu produzi um álbum R&B. 'Changes' é um álbum de R&B. Não foi reconhecido como um álbum de R&B e isso foi muito estranho", continuou o cantor na época.

Bieber está indicado nas categorias Melhor Performance Pop Solo por (por "Yummy"), Melhor Performance Pop Duo / Grupo com "Intentions" (parceria com Quavo), Melhor Álbum Pop Vocal e Melhor Performance Country Duo / Grupo por "+10.000 Hours".

The Weeknd anuncia boicote "para sempre"

Quase ao mesmo tempo, The Weeknd deu uma declaração para o "The New York Times" onde afirmou que não vai mais permitir que sua gravadora submeta suas músicas e álbuns para o Grammy. A decisão vem meses depois da surpreendente ausência do último álbum do cantor, "After Hours", não ser indicado a nenhum prêmio — antes, era considerado o favorito a vencer nas principais categorias.

Segundo ele, a decisão foi tomada baseada na existência de "comitês secretos" dentro da organização que organiza a festa. "Não permitirei mais que minha gravadora envie minha música para o Grammy", disse o artista, que recentemente bateu um recorde com sua música "Blinding Lights": ela se tornou a primeira canção de todos os tempos ar um ano inteiro no Top 10 da Billboard Hot 100.

Outros artistas também anunciaram boicote neste ano. Zayn Malik, ex-One Direction, reclamou do processo de escolha dos indicados. "F*da-se o Grammy e todos os associados. A menos que você aperte a mão e envie presentes, não há considerações de nomeação. No ano que vem, enviarei uma cesta de doces para vocês", afirmou recentemente.

Errata: este conteúdo foi atualizado
A versão anterior indicava a idade errada de Justin Bieber, que tem 27 anos. O texto foi corrigido.