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

PE: 'Em 1 segundo, olhei pra trás e não vi minha casa', diz sobrevivente

30,mai.2022 - Áreas de deslizamentos cobertas por lonas na Vila dos Milagres, no bairro do Ibura, zona sul do Recife - Rodrigo de Luna/UOL
30,mai.2022 - Áreas de deslizamentos cobertas por lonas na Vila dos Milagres, no bairro do Ibura, zona sul do Recife Imagem: Rodrigo de Luna/UOL

Rodrigo de Luna

Colaboração para o UOL, no Recife

30/05/2022 16h33

A dona de casa Ana Paula Nascimento e o marido, o pedreiro Alexandre Paz, conseguiram sair de casa na Vila dos Milagres, no bairro do Ibura, na zona sul do Recife, pulando o muro com os três filhos quando viram a barreira descendo com toda a força. No local, mais de 20 pessoas foram soterradas e os bombeiros ainda buscam por desaparecidos.

"Naquele momento de muita chuva, algo me disse para eu apontar o ouvido para o alto. Eu ouvi uns estalos e dei o alerta para minha família correr. Foi por pouco. Eu segurei meus filhos pelas pernas, joguei por cima do muro e eles escaparam. Logo depois eu pulei", relatou Paz ao UOL, ao lado da esposa.

Ao menos 91 pessoas morreram em cidades do Grande Recife em decorrência das fortes chuvas desde a última quarta-feira (25). O total de desabrigados subiu para "cerca de 5.000", segundo a Defesa Civil do estado. O governo decretou situação de emergência, assim como 14 municípios da região metropolitana.

"Foi um milagre a gente ter escapado com vida. Em um segundo, enquanto eu corria, quando olhei para trás, já não vi mais minha casa. A gente perdeu tudo, mas pelo menos nós estamos vivos. E nossos vizinhos que morreram? É muito triste", finalizou Ana Paula.

Ontem, a comunidade recebeu a visita do prefeito do Recife, João Campos (PSB). A área recebeu reforço de equipes dos bombeiros, das Forças Armadas e da Defesa Civil para que as buscas por vítimas que ainda não foram achadas possam ser localizadas. Até o final da manhã, restavam nove.

Por conta do risco de novos deslizamentos, muitas barreiras receberam lonas plásticas.

Uma área maior de bloqueio foi delimitada para a agem de moradores. Quem mora nas casas em situação de perigo foi orientado. Mas muitos dizem não ter para onde ir. É o caso da dona de casa Stefany Pereira.

"A gente está dormindo em meio ao risco por não ter opção. Faz tempo que cobramos do poder público que algo seja feito. Mas não adianta. Isso foi uma tragédia anunciada", reclamou a jovem que perdeu muitos amigos na tragédia.