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

Tempestade de areia atinge interior de SP; fenômeno ocorre há uma semana

Catanduva (SP) registra nuvem de poeira neste domingo (3) - Reprodução/internet
Catanduva (SP) registra nuvem de poeira neste domingo (3) Imagem: Reprodução/internet

Herculano Barreto Filho

Do UOL, em São Paulo

03/10/2021 18h25

Uma tempestade de areia encobriu hoje o céu de Catanduva (SP), a 386 km da capital paulista. Casos do tipo vêm ocorrendo há uma semana no Estado de São Paulo. No dia 26 de setembro, um episódio foi registrado nas cidades de Franca a Ribeirão Preto.

Ainda que o fenômeno seja considerado raro no país, meteorologistas ouvidos pelo UOL acreditam que outros casos de nuvem de poeira devem ocorrer até o fim do ano devido a uma combinação de ventos que precedem chuvas mais intensas em regiões planas, com baixa umidade e em solos preparados para o cultivo agrícola.

Pedro Côrtes, professor do IEE/USP (Instituto de Energia e Ambiente da Universidade de São Paulo), prevê novos episódios se a seca continuar.

"Esse caso de Catanduva é uma continuidade do fenômeno e uma repetição do que aconteceu na semana ada. Isso ocorre porque existem muitas áreas desmatadas no interior de São Paulo, onde o solo vem sendo preparado para o cultivo. Com isso, é fácil com que seja carregado pelo vento. É como se fosse uma duna em um ambiente desértico", compara.

Fenômeno começou com ventos de até 93 km/h

A frente de rajadas responsável pelo fenômeno que teve início na semana ada foi de cerca de 200 km de extensão entre Franca e Olímpia, em São Paulo, segundo o Instituto Nacional de Meteorologia (Inmet).

"A primavera é o período do ano com maiores contrastes de massas de ar, com longa estiagem e muita poeira no chão [ambiente propício para a formação de nuvens de poeira]. O mais raro mesmo é a extensão. Houve locais com tanta poeira que encobriu o céu", analisou Franco Nadal Junqueira Villela, meteorologista do Inmet.

Nuvem de poeira encobre a cidade de Franca na tarde deste domingo - Igor do Vale/Estadão Conteúdo - Igor do Vale/Estadão Conteúdo
Nuvem de poeira encobre a cidade de Franca na tarde deste domingo
Imagem: Igor do Vale/Estadão Conteúdo

Ainda de acordo com o órgão, os ventos com até 93 km/h também atingiram os municípios de Frutal, Uberaba e Uberlândia, em Minas Gerais.

Segundo o Inmet, a região de Franca registrou na semana ada uma queda brusca de temperatura, que despencou 11ºC. Os termômetros marcavam 28ºC quando a área foi atingida pela nuvem de poeira. Depois da tempestade, a temperatura caiu para 17ºC.

"Isso mostra o contraste de temperatura entre as áreas. O ar estava muito aquecido quando as áreas de instabilidade se aproximaram", explicou Villela. "Esse encontro do ar frio com o ar quente gera uma zona de turbulência, que faz o levantamento desse material para a atmosfera", completou o meteorologista.

Nuvem vermelha de poeira cobre Ribeirão Preto

Band News