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

PM leva até caveirão à praia em dia de protesto com funk em Copacabana

A PM deslocou grande efetivo, incluindo o blindado "caveirão", para os atos em Copacabana, no Rio - Hanrrikson de Andrade/UOL
A PM deslocou grande efetivo, incluindo o blindado "caveirão", para os atos em Copacabana, no Rio Imagem: Hanrrikson de Andrade/UOL

Hanrrikson de Andrade

Do UOL, no Rio

17/04/2016 10h29

A Polícia Militar deslocou grande efetivo para os atos pró e contra o impeachment da presidente Dilma Rousseff na praia de Copacabana, zona sul do Rio de Janeiro, neste domingo (17), dia da votação do processo  Câmara dos Deputados. 

Até o popular caveirão, veículo blindado utilizado para operações contra o tráfico de drogas nas favelas, circula pela orla. A reportagem abordou oficiais da corporação presentes no local, porém eles não informaram o número de homens e mulheres designados para o esquema de segurança.

A preocupação da PM é grande em função da marcação de duas manifestações com objetivos políticos diferentes para a praia de Copacabana. À tarde, integrantes de grupos pró-impeachment vão acompanhar a votação em telões montados no trecho entre os postos 5 e 6. A eata contra o impeachment, organizada pela produtora de funk Furacão 2000, seguirá do posto 3 em direção ao Leme. Durante o trajeto, artistas de funk vão se apresentar para o público.

A polícia informou que faria um cordão de isolamento para evitar possível contato entre os protestos rivais. No entanto, a estrutura ainda não havia sido montada até 9h30.

Segundo PMs, como o ato contra impeachment ainda está na concentração, a medida ainda não se faz necessária. "A gente vai ter que fechar a pista da Atlântica, se for necessário. Como isso pode atrapalhar o trânsito, vamos segurar por enquanto", disse um policial. As grades que serão utilizadas para eventual montagem da barreira estão em dois caminhões da Tropa de Choque.

Participam do esquema de segurança PMs dos batalhões da zona sul, da Tropa de Choque e do Bope (Batalhão de Operações Especiais), além de guardas municipais e agentes da Seop (Secretaria Especial de Ordem Pública).

No "Fla-Flu" da política, manifestantes disputam até grito de guerra

UOL Notícias