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

Chapéu 'millennial hippie' é símbolo de mochilão pela América Latina

diana branco - chapéu - Arquivo pessoal
diana branco - chapéu Imagem: Arquivo pessoal

Marilia Marasciulo

Colaboração para Nossa

24/08/2020 04h00

Diana Ferreira Branco

Diana Ferreira Branco

Profissão

Internacionalista, trabalha com marketing

Minha roupa com história

Chapéu bucket colorido que me acompanhou em viagem do Brasil ao Peru

Esse chapéu, que apelidei carinhosamente de chapeuzinho millennial hippie, é o símbolo do meu mochilão pela América Latina. Entre janeiro e março deste ano, eu e meu namorado fomos do Brasil até o Peru de carro, em um período sabático.

A peça foi um achado logo na primeira semana da viagem, em Cabo Polônio, no Uruguai. É um desses pueblitos típicos de América Latina, com uma energia muito gostosa e meio mágica, que só pode ser ado por um ônibus específico e mal tem energia elétrica. eando por lá, encontrei uma lojinha que vendia de tudo, inclusive chapéus.

Eu estava em busca de um porque estou com um problema nos olhos que me impede de usar lentes de contato, então não teria como usar óculos escuros. Assim que vi esse, me apaixonei, achei a minha cara: uma peça toda colorida, cheia de retalhos. Tanto que não tive dúvidas quando fui pagar e me surpreendi com o preço, bem acima do que os outros da loja.

Bucket hat - diana - Arquivo Pessoal - Arquivo Pessoal
Diana com o bucket hat colorido
Imagem: Arquivo Pessoal
diana e o namorado - Arquivo Pessoal - Arquivo Pessoal
Diana e o namorado, em Machu Picchu
Imagem: Arquivo Pessoal

Não é de nenhuma marca famosa, mas é bem acabado, feito de algodão e com uma cobertura boa, valeu a pena. O mais legal é que, por ter estampas diferentes, posso usar de vários lados. É como se tivesse muitos chapéus em um só.

Ele me acompanhou por todos os países e se tornou a peça mais valiosa da viagem, fazia questão de tê-lo sempre comigo. Recentemente, tive até uma situação meio desesperadora, achando que tinha perdido o chapéu.

Diana - bucket hat - Arquivo Pessoal - Arquivo Pessoal
Bucket hat se tornou parceiro essencial para as futuras viagens para Diana
Imagem: Arquivo Pessoal

É que nossa aventura foi interrompida de uma maneira meio abrupta, porque a pandemia estourou quando estávamos em Cusco e o carro tinha ficado em um estacionamento em Lima. Tivemos tempo de entrar em um voo de volta para o Brasil antes que a fronteira fechasse, mas o carro ficou abandonado lá. De volta ao Brasil, fui procurar o chapéu e não encontrei, por um segundo achei que tinha ficado no carro, entrei em pânico. Era só o que faltava perder meu chapeuzinho!

Mas ainda bem que encontrei. Pretendo usar muito essa peça, tenho certeza que vai me acompanhar por anos e anos. Aliás, espero inclusive que ele venha no sabático 2.0, para resgatar o carro no Peru. Há de acontecer, e o chapeuzinho vai estar lá também para contar mais essa história.

Como usar

Boho moderno

O vestido básico de poá ganha ar hippie moderninho se combinado ao chapéu colorido, rasteira gladiadora e bolsa de rede. Para não ficar over, opte por coordenar a paleta de cores ou tons neutros.

Esportiva

O combo calça cargo e blusinha cropped ganha ar fashionista co um bucket hat colorido.