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

Alok é eleito o quinto melhor DJ do ano pela DJ Mag; Guetta volta ao topo

Alok, quinto melhor DJ do ano, segundo a revista DJ Mag - Reprodução/Twitter
Alok, quinto melhor DJ do ano, segundo a revista DJ Mag Imagem: Reprodução/Twitter

Do Splash, em São Paulo

08/11/2020 10h52

O brasileiro Alok foi eleito o quinto melhor DJ do ano no top 100 da DJ Mag, publicação que é referência do gênero. O francês David Guetta voltou a liderar a lista, que traz nomes eleitos por votação popular no site da revista. Nas redes sociais, Alok agradeceu o apoio de amigos e fãs pela conquista.

"Aos fãs e à tropa, meu muito obrigado, reconheço os esforços diários de todos vocês. Sem vocês, nada seria possível! Essa conquista me enche de amor por todo o caminho percorrido. Espero que ela desperte nas pessoas o que desperta em mim: a vontade de contribuir positivamente, impactando o próximo de alguma maneira. Quero agradecer a todos vocês que me acompanharam até aqui deixando um convite para seguirmos juntos nesta jornada. É o amor pela caminhada que impulsiona os nossos sonhos. Muito obrigado!", escreveu ele.

Ao longo do tempo aprendi que não só nosso trabalho, mas nossas reais intenções nos levam adiante. A contribuição de pessoas a minha volta é essencial e saber reconhecer o esforço de cada um para cada conquista é necessário. Aos fãs e a tropa, meu muito obrigado, reconheço os esforços diários de todos vocês. Sem vocês, nada seria possível! Essa conquista me enche de amor por todo o caminho percorrido. Espero que ela desperte nas pessoas, o que desperta em mim: a vontade de contribuir positivamente impactando o próximo de alguma maneira. Quero agradecer a todos vocês que me acompanharam até aqui deixando um convite para seguirmos juntos nesta jornada. E? o amor pela caminha que impulsiona os nossos sonhos. MUITO OBRIGADO! Essa conquista é nossa: #5 @djmagofficial [Deslize para ver o vídeo] Over time I learned that not only our work but our real intentions take us forward. The contribution of people around me is essential and knowing how to recognize each one's effort for each achievement is necessary. To the fans, thank you very much, I acknowledge the daily efforts of all of you, including you "tropa". This achievement fills me with love for all that we have gone so far. I hope it awakens in people, what it awakens in me: the willingness to contribute positively to others in some way. I want to thank all of you who have accompanied me until here and I invite you to continue on this journey together. Foto: @gil_inoue para @gqbrasil Vídeo: @gabrieltwa @sergiotwa Motion: @budjubas Styling: @rodrigopolack

Uma publicação compartilhada por Alok (@alok) em

Guetta retornou ao topo depois de nove anos. "É incrível, acho que estou mais feliz do que da primeira vez", disse o francês à DJ Mag. "As coisas são mais rápidas hoje. Quando ganhei há dez anos, senti que veio muito tarde. Estava em turnê já há dois anos e me perguntava 'por que não estou ganhando?', sabe?", disse.

Veja o top 10 do ranking de melhores DJ do ano pela DJ Mag:

  1. David Guetta
  2. Dimitri Vegas & Like Mike
  3. Martin Garrix
  4. Armin van Buuren
  5. Alok
  6. Don Diablo
  7. Afrojack
  8. Oliver Heldens
  9. Steve Aoki
  10. Timmy Trumpet