;(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 usa drones, helicóptero e tem dia de poucas ocorrências no Fla e Vasco

Policiais do Grupamento Aeromóvel (GAM) utilizaram drones para monitorar o público no Flamengo e Vasco - Divulgação / PMERJ
Policiais do Grupamento Aeromóvel (GAM) utilizaram drones para monitorar o público no Flamengo e Vasco Imagem: Divulgação / PMERJ

Do UOL, no Rio de Janeiro

14/03/2023 15h00

O clima era de apreensão após as violentas brigas do último dia 5, mas com o afastamento das organizadas, uma readequação na logística e um forte aparato que contou até mesmo com drones e helicóptero, a Polícia Militar conseguiu dar segurança ao Flamengo e Vasco de ontem (13), e o clássico acabou tendo poucas ocorrências no Maracanã, nenhuma de alta gravidade.

Drones e helicóptero

Após itir falhas na execução do clássico entre o Rubro-Negro e o Cruzmaltino na Taça Guanabara, a Polícia Militar montou um esquema especial e não abriu mão da tecnologia.

O Grupamento Aeromóvel (GAM) levou ao Maracanã drones, utilizados para monitorar o público e guiar os policiais em terra.

Um helicóptero chamado de "Fênix" também sobrevoou as imediações do estádio para mapear a movimentação dos torcedores.

Viaturas realizaram pequenas blitz nas principais vias de o ao Maracanã e o entorno teve o reforço da Cavalaria e do Batalhão de Choque.

As estações ferroviárias - que haviam sido alvos de críticas por parte dos torcedores — foram reforçadas pelo Grupamento de Policiamento Ferroviário (GPFer) e pelo Batalhão de Rondas Especiais e Controle de Multidão (Recom).

Pequenos delitos

Batalhão Especial de Policiamento em Estádios prendeu cambistas no Flamengo e Vasco no Maracanã - Divulgação / PMERJ - Divulgação / PMERJ
Batalhão Especial de Policiamento em Estádios prendeu cambistas no Flamengo e Vasco no Maracanã
Imagem: Divulgação / PMERJ

O UOL esteve presente no Juizado Especial Criminal (Jecrim) do Maracanã no intervalo do clássico de ontem. Segundo os policiais civis que estavam no plantão, foram poucas as ocorrências antes da partida, nenhuma de maior gravidade.

Os delitos registrados foram a prática de cambismo — com a apreensão dos ingressos — a prisão de um torcedor que atirou objeto no gramado após o primeiro gol do Vasco, e de outro que portava um artefato explosivo de menor porte. Não houve detenções por briga.

Organizadas afastadas

Uma das diferenças na logística da Polícia Militar ontem (13) foi influenciada por uma decisão da Justiça em afastar por tempo indeterminado as principais organizadas de Flamengo e Vasco, além das de Botafogo e Fluminense.

Com isso, não houve escolta destes torcedores, o que permitiu aos policiais terem mais homens e equipes em pontos estratégicos do o ao Maracanã.

Além da suspensão das organizadas, foram presos temporariamente os presidentes da Raça Rubro-Negra, da Torcida Jovem do Flamengo, da Força Jovem do Vasco e da Young Flu.