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

Ricardo Feltrin

REPORTAGEM

Sting faz 70 anos: Veja as 10 músicas dele mais tocadas no Brasil

Sting em cena do filme "Quadrophenia", de 1979 - Reprodução
Sting em cena do filme "Quadrophenia", de 1979 Imagem: Reprodução

Colunista do UOL

02/10/2021 00h09

O compositor, baixista, cantor e ator britânico Gordon Matthew Sumner completa 70 anos neste sábado (2).

Conhecido simplesmente como Sting ("ferrão", em inglês), ele foi criador e líder do The Police, uma das mais famosas bandas do pop rock de todos os tempos —e que esteve em atividade frenética entre 1977 e 1983 (com alguns retornos breves). Sting segue ativo até hoje em carreira solo de sucesso.

Para marcar a efeméride, e a pedido desta coluna, o Ecad (Escritório Central de Arrecadação) fez um levantamento das composições de Sting (com ou sem parceria) mais tocadas no Brasil em rádios, TVs e shows nos últimos 10 anos.

O clássico "Every Breath You Take" lidera o top 10.

O banco de dados do Ecad —um dos maiores do mundo— registra 431 obras e 1.191 gravações (fonogramas) de Sting.

Segundo a legislação brasileira, os herdeiros de Sting (filhos, netos, bisnetos etc) ainda receberão os direitos por 70 anos depois que ele partir.

Veja as 10 músicas de Sting mais tocadas no Brasil nos últimos 10 anos.

1 - "Every Breath You Take" (Gordon Sumner - Sting)

2 - "Money For Nothing" (Mark Knopfler/Sting)

3 - "Every Little Thing She Does is Magic" (Sting)

4 - "Fields of Gold" (Sting)

5 - "Message In The Bottle" (Sting)

6 - "Roxanne" (Sting)

7 - "King Of Pain" (Sting)

8 - "Fragile" (Sting)

9 - "Spirits In The Material World" (Sting)

10 - "I´ll Be Missing You" (Sting)

Ricardo Feltrin no Twitter, Facebook, Instagram e site Ooops