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

Jacarezinho: Policial do Choque ite ter matado jovem sem troca de tiros

Jonatan Ribeiro de Almeida foi baleado e morto no Jacarezinho, zona norte do Rio - Reprodução
Jonatan Ribeiro de Almeida foi baleado e morto no Jacarezinho, zona norte do Rio Imagem: Reprodução

Lola Ferreira

Do UOL, no Rio

26/04/2022 12h25

Um cabo do Batalhão de Choque da Polícia Militar assumiu na Delegacia de Homicídios que atirou ontem à noite contra Jonatan Ribeiro de Almeida, 18, na favela do Jacarezinho, zona norte do Rio de Janeiro, sem que houvesse uma troca de tiros. O jovem não resistiu aos ferimentos e morreu na UPA (Unidade de Pronto Atendimento) de Manguinhos, na mesma região.

No registro de ocorrência, obtido pelo UOL, o policial do Choque afirma que atirou contra Jonatan após ele tirar uma arma de fogo da cintura durante uma abordagem policial. A mãe de Jonatan nega que ele tivesse qualquer relação com o tráfico de drogas da comunidade. O jovem deixou um filho de quatro meses.

Os policiais afirmam que viram a vítima e outros homens vendendo drogas na localidade do Pontilhão, o que motivou a abordagem. Além do policial que atirou, havia outros dois agentes do Choque.

Não deram o direito do meu filho viver, diz mãe

Em entrevista à TV Globo, Monique Ribeiro dos Santos, mãe de Jonatan, explicou que o jovem trabalhava com sua irmã e aguardava o momento de se alistar ao Exército.

Não deram o direito do meu filho viver, porque não deram nenhum socorro. Mataram e deixaram lá."
Monique Ribeiro, mãe de Jonatan, morto no Jacarezinho

"[Ele era] um menino de bem, trabalhador, trabalha com a minha irmã em venda de roupas, faz entrega. Não estava trabalhando agora porque ele está para se alistar no quartel e não podia trabalhar de carteira assinada. E mataram meu filho com um tiro no peito. O que meu filho fez?", lamentou Monique.

Na noite de ontem, um protesto bloqueou a avenida Dom Hélder Câmara, entrada da comunidade.

Além de Monique, moradores relatam que Jonatan foi abandonado na rua, sem qualquer tipo de socorro, após ser baleado. Um vídeo gravado pelo ativista Diego Aguiar, morador do Jacarezinho, flagra o momento em que moradores socorrem Jonatan até a UPA em uma moto.

No Twitter, Aguiar disse ter testemunhado o momento e diz: "Eles deram o tiro e saíram correndo".

Na delegacia, os policiais afirmaram que não conseguiram prestar socorro porque "foram agredidos por populares, que começaram a atirar pedras" contra eles. Na versão da PM, os policiais saíram do local para buscar reforços e voltaram, mas o corpo não estava mais no local.

O registro de ocorrência indica que foram apreendidos pela Polícia Civil o fuzil utilizado pelo policial do Choque, além de uma pistola, tabletes de maconha e sacos de cocaína — atribuídos a Jonatan, mas sem comprovação.

Em nota, a Polícia Militar confirma a versão apresentada pelos policiais na Delegacia de Homicídios mas não cita a autoria do disparo que matou Jonatan. A corporação afirma que a Corregedoria da Polícia Militar irá apurar a ocorrência e que as armas estão à disposição da perícia.