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

Temporal alaga ruas e invade lojas e estação de trem em Santo André (SP)

Do UOL, em São Paulo

28/12/2021 23h13Atualizada em 29/12/2021 12h58

As fortes chuvas que atingiram São Paulo hoje causaram estragos na região do Grande ABC, especialmente em Santo André. Vídeos enviados ao UOL mostram a enxurrada invadindo lojas e a estação Prefeito Celso Daniel-Santo André, da Linha 10-Turquesa da TM (Companhia Paulista de Trens Metropolitanos), prejudicando a circulação de trens.

Segundo o prefeito de Santo André, Paulo Serra (PSDB), choveu em meia hora quase metade do esperado para todo o mês de dezembro na cidade. Em uma rede social, ele também informou que, apesar dos estragos, os temporais não deixaram vítimas.

"Equipe trabalhando desde o início da chuva para restabelecer a normalidade. Limpeza e manutenção a todo vapor após uma chuva de intensidade de 109 milímetros em menos de 30 minutos. Para o mês de dezembro, eram esperados 250 milímetros de chuva. Graças a Deus, nenhuma vítima. Vamos em frente! O trabalho não para!", publicou.

Foi uma quantidade de água muito grande, mas é importante a gente restabelecer a normalidade. Graças a Deus, [não houve] nenhuma vítima. [Houve] Prejuízos materiais, mobilidade urbana prejudicada... Mas o trabalho da equipe agora durante toda a noite é para a gente restabelecer a normalidade o quanto antes.
Paulo Serra, prefeito de Santo André, em vídeo

Só na tarde desta terça-feira (28) foram registrados 71 pontos de alagamento ou enchentes em Santo André, de acordo com balanço do Corpo de Bombeiros. Também houve chamados para queda de árvores em São Bernardo do Campo e para desmoronamentos/desabamentos em Mauá, ambas no Grande ABC.

À tarde, a Defesa Civil de Santo André alertou a população que "novas instabilidades provocarão condições para chuvas, com momento de tempestade, seguidas por raios ventos e granizo". O órgão ainda recomendou evitar algumas regiões onde os alagamentos causaram interdições. São elas:

  • Estrada do Pedroso x Rua dos Missionários;
  • Avenida Mario Toledo de Camargo x Avenida São Bernardo;
  • Avenida Mario Toledo de Camargo x Avenida Dom Pedro I;
  • Avenida Santos Dumont x Praça XIV Bis;
  • Rua Siqueira Alves, Vila Alzira (travessa com Santos Dumont);
  • Valem Magalhães.

Até as 23h, a Linha 10-Turquesa da TM ainda operava em velocidade reduzida entre as estações Rio Grande da Serra e Prefeito Celso Daniel-Santo André. "E mais uma vez o povo do ABC Paulista sofre com a chuva e alagamentos", escreveu uma usuária.