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

'Cenário de guerra': Delegado mostra local de confronto no Jacarezinho

Local de confronto entre policiais e suspeitos na operação que deixou 28 mortos no Jacarezinho, na zona norte do Rio de Janeiro - Reprodução/Instagram
Local de confronto entre policiais e suspeitos na operação que deixou 28 mortos no Jacarezinho, na zona norte do Rio de Janeiro Imagem: Reprodução/Instagram

Colaboração para o UOL

08/05/2021 08h08Atualizada em 08/05/2021 09h40

Um dos delegados que participaram da operação da Polícia Civil do Rio no Jacarezinho divulgou um vídeo que mostra um dos locais de confronto entre policiais e suspeitos na favela da zona norte da capital fluminense.

Nas imagens, feitas em um beco da comunidade, aparecem pelo menos três policiais de prontidão, dezenas de cápsulas de bala no chão e várias marcas de tiros.

"Um dos pontos em que as equipes da Core foram atacadas no Jacarezinho. Centenas de estojos dos criminosos pelo chão. Cenário de guerra", disse o delegado Fabrício Oliveira, titular da Core (Coordenadoria de Recursos Especiais), no vídeo postado em suas redes sociais.

A operação no Jacarezinho foi a mais letal da história do Rio de Janeiro e deixou 28 mortos, dentre eles o policial civil André Leonardo Mello Frias, 48.

O secretário de Polícia Civil, Allan Turnowski, disse que todos os outros 27 mortos na ação eram suspeitos de envolvimento com o tráfico de drogas da região, mas não apresentou provas. Dos 21 alvos mandados de prisão da operação, três foram mortos.

Familiares denunciam que as vítimas foram executadas. Representantes de entidades que defendem os direitos humanos cobram uma apuração rigorosa da ação, dentre eles o Alto Comissariado da ONU para Direitos Humanos.

O governador Cláudio Castro (PSC) defendeu a operação, dizendo que "a reação dos bandidos foi a mais brutal registrada nos últimos tempos".

Mais de 48 horas depois da ação, a Polícia Civil ainda não divulgou a identidade dos 27 mortos. A Comissão de Direitos Humanos da OAB-RJ (Ordem dos Advogados do Brasil no Rio de Janeiro) compilou os nomes e as idades de 16 vítimas.