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

Esse conteúdo é antigo

Tiroteios interrompem ações voluntárias contra covid-19 no Complexo do Alemão

 O Complexo do Alemão, no Rio de Janeiro - Matias Maxxx
O Complexo do Alemão, no Rio de Janeiro Imagem: Matias Maxxx

27/04/2020 18h16

Tiroteios no conjunto de favelas que integram o Complexo do Alemão, na zona norte do Rio de Janeiro, interromperam nesta segunda-feira (27) a distribuição de alimentos e itens de higiene por voluntários na luta contra o novo coronavírus, informaram ativistas.

"O tiroteio cancelou nossas atividades da manhã, porque parte das pessoas que são voluntárias são da região onde estava tendo conflito", disse à AFP Raull Santiago, ativista social do Complexo do Alemão.

Segundo a Polícia Militar, trocas de tiros foram registradas em dois pontos diferentes no Alemão, depois que "criminosos armados" atiraram em agentes e instalações policiais.

"A presença da polícia foi reforçada e houve um confronto. Até agora não há informações sobre feridos, presos ou apreensões", afirmou a polícia em comunicado.

Confrontos entre policiais e traficantes que dominam muitas regiões periféricas do Rio são comuns para seus habitantes, que muitas vezes ficam presos sob fogo cruzado sem poder sair de casa para trabalhar, ir à escola ou a centros de saúde.

Para atenuar os efeitos da paralisia econômica causada pelo novo coronavírus, os voluntários do Complexo do Alemão formaram um comitê de crise que há semanas distribui doações de cestas básicas, materiais de higiene, material de limpeza e água.

"Desde o início da pandemia, as operações policiais diminuíram, assim como os confrontos e mortes, o que infelizmente aponta que a estratégia de 'guerra' que o Estado usa para lidar com as drogas é parte central da violência nas favelas e periferias", disse Santiago.

A Rede de Observatórios de Segurança, composta por organizações acadêmicas e da sociedade civil, registrou uma redução de 23% no número de operações policiais em março (em comparação com o mesmo mês do ano ado), principalmente após a entrada em vigor do estado de emergência no Rio de Janeiro.

"A queda no número de ações policiais reduziu o número de vítimas (mortas e feridas) nessas operações. Durante o mês de março de 2020, houve 15 mortes, enquanto no ano ado foram 36 mortes", destacou o observatório em seu último relatório, publicado no início de abril.

No entanto, especialistas alertam que nos primeiros dias de abril foi observado um novo aumento de operações e confrontos em várias partes da capital, o que poderia agravar ainda mais a situação dos bairros periféricos em meio à crise da saúde.