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

Busca por desaparecido em tragédia no litoral de SP é suspensa

Bombeiros buscam desaparecido na Baleia Verde, em São Sebastião - 28.fev.2023/Divulgação
Bombeiros buscam desaparecido na Baleia Verde, em São Sebastião Imagem: 28.fev.2023/Divulgação

04/03/2023 20h44Atualizada em 05/03/2023 06h12

Forças de segurança e resgate suspenderam novamente as buscas por um homem desaparecido no bairro Vila Baleia Verde, em São Sebastião, litoral norte de São Paulo. Não há expectativa, por enquanto, de retomada dos trabalhos de resgate em razão das chuvas.

O que se sabe

  • As buscas haviam sido paralisadas durante a semana por conta das condições climáticas.
  • As operações foram retomadas ontem, após técnicos do IPT e do Corpo de Bombeiros constatarem a melhoria nas condições do solo.
  • Hoje, porém, as buscas foram suspensas novamente por risco de deslizamentos.
  • Até o momento, 65 mortes foram confirmadas, sendo 64 em São Sebastião e uma em Ubatuba.
  • Já foram identificados e liberados para o sepultamento 57 corpos.
  • Até o momento, 22 adultos e seis crianças vítimas das chuvas foram atendidas no Hospital Regional do Litoral Norte.
  • Cinco permanecem internados com estado de saúde estável.
  • Outros 18 pacientes já receberam alta hospitalar e cinco foram transferidos para outras unidades.

Desabrigados

  • Os desabrigados deixaram as 10 escolas que abrigaram famílias após as fortes chuvas no feriado prolongado do carnaval.
  • Cerca de 1.000 deles foram transferidos para hotéis e pousadas das regiões de Juquehy, Sahy e Boiçucanga.
  • A iniciativa possibilita o retorno às aulas nas escolas que estavam servindo de abrigo até agora.
  • A Defesa Civil iniciou a demolição de 79 casas com problemas estruturais
  • Ao menos nove casas foram interditadas em definitivo no bairro Itatinga, região central da cidade, e outras 70 na comunidade da Vila Sahy, região que sofreu os maiores impactos.

O governo de São Paulo publicou hoje um decreto que cria a Gerência de Apoio do Litoral Norte para dar continuidade às ações de auxílio às vítimas e famílias desabrigadas, além da reconstrução dos municípios da região afetados com as fortes chuvas registradas no final de semana prolongado do Carnaval.

Entre os dias 18 e 19 de fevereiro, o litoral de São Paulo registrou recorde no acumulado de chuvas em 24 horas, com 683 milímetros, que ocasionaram deslizamentos de terras, alagamentos e um rastro de destruição, principalmente em São Sebastião.
A nova gerência coordenará ações relativas ao plano de reconstrução do litoral norte e irá gerenciar a relação com órgãos, entidades, instituições, empresas e outros grupos que possam contribuir com a reconstrução da região.