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

'Ciclone gigante' causou madrugada fria em SP, diz meteorologista

Colaboração para o UOL

18/05/2022 09h32Atualizada em 18/05/2022 10h04

O meteorologista Giovanni Dolif, pesquisador do Centro Nacional de Monitoramento e Alertas de Desastres Naturais, explicou, em entrevista ao UOL News, que os ventos fortes que causaram a madrugada mais fria do ano na capital paulista nesta noite devem se repetir.

Dolif diz que a previsão é de que esse ciclone ainda cause ventos fortes hoje no sul e norte de Santa Catarina, Paraná e em São Paulo mais uma vez.

"Ali no sul de Santa Catarina os ventos vão ser mais fortes. Em Rio Grande do Sul vão diminuir. São Paulo e Rio de Janeiro terão ventos mais fortes, devem acontecer amanhã, ao longo do dia. A próxima madrugada ainda será bem fria", disse o meteorologista.

Segundo o especialista, um "ciclone gigantesco" foi o responsável por ventos fortes que causaram a madrugada mais fria em São Paulo esta noite.

"Esse ciclone teve uma trajetória diferente. Normalmente, se forma na costa do Sul, proporciona ar frio e vai embora. Esse, ao invés de ir embora, voltou para o continente. Esses ventos fortes dessa noite são por causa do ciclone. Apesar do centro não está em cima de São Paulo, ele é gigantesco", afirmou.

A cidade de São Paulo teve uma média de 8°C de temperatura ao longo da madrugada de hoje, a menor de 2022. Até o momento, o recorde era do dia 5 de maio, quando os termômetros do CGE (Centro de Gerenciamento de Emergências Climáticas) haviam divulgado uma média de 12,4°C em suas estações meteorológicas.

Tempestade causa morte, traz neve pela primeira vez e muda rotina no Sul

A tempestade subtropical Yakecan já está mudando o clima nos Estados da Região Sul do Brasil, vai baixar as temperaturas em metade do País nos próximos dias e já causou pelo menos uma morte. Entre os efeitos prováveis estão rajadas de ventos fortes, de até 120 km/h, e possível ocorrência de neve em Rio Grande do Sul, Santa Catarina e sul do Paraná, na região da Serra de Palmas.

Esse sistema de baixa pressão começou como um ciclone extratropical, muito comum, juntamente com uma frente fria no fim de semana. "Mas na segunda-feira se desprendeu dessa frente fria e começou a se movimentar do mar em direção ao continente, com trajetória típica de furacão", observa Estael Sias, meteorologista da Metsul. Isso não significa que a tempestade vai se tornar um furacão. Em linhas gerais, o ciclone é um sistema de baixa pressão atmosférica em que o vento gira no sentido horário.

"Todo esse vento do ciclone sobre o mar causa aumento das ondas e propicia maré meteorológica. O nível do mar sobe e, por isso, deve ter 'ressaca' significativa no litoral do Sul e Sudeste, que vamos observar ao longo de alguns dias", explicou Giovanni Dolif ao UOL News.

  • Veja as notícias do dia no UOL News: