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

Protestos por morte de Floyd deixam 2 mortos nos EUA

30/05/2020 11h18

ROMA, 30 MAI (ANSA) - Um jovem de 19 anos e um agente federal morreram entre a noite desta sexta-feira (29) e manhã deste sábado (30) durante novo protesto pela morte de George Floyd, homem negro asfixiado por um policial branco, em Minneapolis, nos Estados Unidos. Os atos foram realizados em pelo menos 30 cidades do país, entre elas Saint Paul (Minnesota), Atlanta (Geórgia), Detroit (Michigan), Nova York, Portland (Oregon), Dallas, Houston (Texas), Los Angeles, San Jose, Oakland (Califórnia), Las Vegas (Nevada), Columbus (Ohio) e Phoenix (Arizona).   

De acordo com a emissora americana CNN, centenas de pessoas foram detidas. O número de prisões, no entanto, não foi informado. As mortes ocorreram no Michigan e na Califórnia. O homem foi morto em Detroit depois de ser baleado após uma pessoa abrir fogo contra os manifestantes. As autoridades investigam se ele fazia parte do grupo ou não. Já o policial perdeu a vida em Oakland, enquanto outro agente ficou ferido.   

Pelo menos 7,5 mil manifestantes foram às ruas para protestar contra a morte de Floyd. Segundo as autoridades, há registros de saques e lojas incendiadas, além de ataques contra outros policiais. Ontem à noite, um protesto também foi registrado em frente à Casa Branca, em Washington. O presidente dos EUA, Donald Trump, estava no local. O ato teve início em um parque perto do edifício. Milhares de pessoas entoaram slogans como "sem justiça, sem paz" e "diga o nome dele: George Floyd". Alguns cartazes diziam "ele disse que não podia respirar. Justiça para George". O Pentágono pediu ao exército para manter várias unidades militares prontas para serem implantadas em Minneapolis, informou a agência Associated Press.   

O governador da Geórgia, Brian Kemp, por sua vez, declarou estado de emergência no condado de Fulton, onde fica Atlanta, devido às tensões e tumultos durante os protestos. Há manifestações em andamento, assim como na capital, em Saint Paul.   

A nova onda de protestos acontece no dia em que o policial Derek Chauvin, agente que pressionou o pescoço de Floyd, foi detido pelas autoridades. A autópsia da vítima, no entanto, atualmente exclui "um diagnóstico de asfixia ou estrangulamento traumático". A família pede outro relatório independente. (ANSA)
Veja mais notícias, fotos e vídeos em www.noticias-uol-br.noticiasdoacre.com.