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

Sabrina Sato e Evandro Mesquita incentivam viagens para "perto de casa"

Apaixonada por praia, Sabrina Sato escolheu o litoral de São Paulo para dar sua "fugidinha" - Reprodução/Instagram
Apaixonada por praia, Sabrina Sato escolheu o litoral de São Paulo para dar sua "fugidinha" Imagem: Reprodução/Instagram

De Nossa

19/10/2020 11h01

Esqueça os posts com andanças por destinos como EUA, Europa, Ásia. A pedida dos viajantes famosos e anônimos - por enquanto - é explorar destinos mais próximos de casa.

Em ação promovida pelo Airbnb, Sabrina Sato e Evandro Mesquita vão incentivar seus seguidores a optarem por viagens "hiperlocais" (a até 300 quilômetros dos centros urbanos) e vão mostrar toda a experiência em suas contas no Instagram de 23 a 25 de outubro.

"Poder sair um pouco da rotina, ou ao menos mudar a rotina de lugar, para relaxar e repor as energias respeitando todas as medidas de distanciamento e higienização, faz bem para o corpo e a alma", diz a apresentadora, que decidiu levar a família para o litoral paulista.

13.jun.2015 - A frente da banda Blitz, Evandro Mesquita se apresenta no Circo Voador montado no Arpoador, uma réplica do projeto criado por Perfeito Fortuna no verão de 1982 - AgNews - AgNews
Evandro Mesquita vai escapar para Búzios, bem pertinho do Rio de Janeiro
Imagem: AgNews

Já o destino escolhido pelo cantor foi Búzios, no Rio de Janeiro. "Cada um tem sua própria ideia de paraíso e essa percepção mudou bastante no contexto da pandemia. Estar com a família numa casa bacana e tão perto da natureza é algo especial, ainda mais sendo um lugar próximo, uma viagem simples, que se faz de carro", diz Evandro.

Tendência

Segundo dados do Airbnb, de março a agosto, 100 mil novos hóspedes fizeram reservas pela plataforma no mundo todo, principalmente em destinos hiperlocais. No Brasil, entraram no roteiro dos hóspedes cidades que, até então, não faziam parte da rota turística tradicional. E, ao lado de outras localidades que, mesmo conhecidas, acabavam muitas em segundo plano diante da possibilidade de viagens internacionais, aram a ser consideradas verdadeiros paraísos perto de casa.

Ainda de acordo com o a plataforma, no Brasil, entre as cidades que mais se ganharam posições no ranking de reservas em agosto, na comparação com o mesmo mês de 2019, estão São Sebastião (subiu 13 posições), Caraguatatuba (25), Ubatuba (10), Ilhabela (16), Campos do Jordão (10), Riviera de São Lourenço (15), Petrópolis (12), Angra dos Reis (24), Búzios (9), Resende (19), Tibau do Sul (11), Imbituba (25), São José dos Campos (17) e Sorocaba (24).