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

Aeroportos sofrem com queda sensível de movimento; entenda a situação

Terminal de aeroporto vazio em tempos de coronavírus - Getty Images/iStockphoto
Terminal de aeroporto vazio em tempos de coronavírus Imagem: Getty Images/iStockphoto

Gilberto Amendola

17/03/2020 11h43

ageiros de máscara, lojas e cafés vazios, embarque e check-in sem filas, aglomerações apenas em áreas destinadas à reclamações ou remarcações de voo. Esse era o clima nos aeroportos de Congonhas e Cumbica na tarde de segunda-feira, 16 - após a nova série de medidas impostas por conta do coronavírus pelos governos estaduais e municipais.

A aviação tem sido um dos setores mais afetados pela pandemia. Países têm fechado fronteiras, voos estão sendo cancelados e companhia aéreas deixam de voar para alguns destinos.

Em Congonhas, em São Paulo, o tradicional trânsito de carros de aplicativo e taxistas quase não existe mais. Motoristas de aplicativo dizem que não está valendo esperar por ageiros. Os taxistas, que já vinham enfrentando queda na demanda por corridas, afirmam que "o que era ruim está ainda pior".

Ao chegar no saguão de Congonhas, chama atenção a quantidade de pessoas usando máscaras. Ao menos as ouvidas pela reportagem garantiram não ter sintomas, mas usam máscara por "medida de segurança".

A arquiteta Valesca Serafim, 29 anos, decidiu se precaver, embora não tenha tido, até o momento, nenhum sintoma. "Participei de um congresso com muita gente. Embora não tenha sintomas, não posso garantir que não tenha sido infectada por alguém naquele ambiente. Então, acho melhor usar a máscara para evitar prejudicar alguém", contou.

O embarque e os check-ins não tinham fila. Já os balcões reservados para remarcações s eram focos de aglomeração. A reportagem esteve em Congonhas por volta das 16h30, quando foram cancelados voos para o Rio, Porto Alegre e Londrina.

Na farmácia, nem sinal de álcool em gel ou máscaras. Segundo o farmacêutico, os produtos, repostos todos os dias, estão acabando logo pela manhã.

Cumbica

Em Cumbica, o cenário é o mesmo. O aeroporto está sensivelmente mais vazio. O baixo movimento se reflete na maioria das lojas e cafés. O mesmo ocorre nos locais de embarque, desembarque e check-ins.

É possível ver famílias inteiras usando máscara. A reportagem conversou com um empacotador de malas que trabalha no terminal 2. Ele estava de máscara. "Não é por mim. Mas a minha família tem medo. Acreditam que por eu trabalhar no aeroporto estou mais exposto. Hoje é o meu primeiro dia com a máscara. Não sei se vou aguentar", disse Vítor Viana, 22 anos.

No desembarque internacional, dois tipos de cena. Famílias que se abraçavam como se não existisse o coronavírus e pessoas que, apenas se cumprimentavam com os cotovelos - não raro com todos com máscaras. As informações são do jornal O Estado de S. Paulo.