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

Tchau, realeza! 4 coisas que Meghan Markle vai poder voltar a usar agora

Meghan Markle - Getty Images
Meghan Markle Imagem: Getty Images

Aline Fava

Colaboração para Universa

31/03/2020 04h00

Parecia distante, mas o dia 31 de março chegou. Esta foi a data determinada pela realeza britânica para que Harry e Meghan Markle deixassem suas atividades (e responsabilidades!) como membros da Família Real. Na prática, o casal manterá seus títulos de duque e duquesa de Sussex, mas não os usarão e nem representarão a Rainha Elizabeth 2ª em eventos reais.

As apostas são de que o estilo de Meghan pode mudar bastante, já que ela não precisará mais seguir as muitas regras de vestimenta imposta às mulheres da Família Real. Em seus últimos eventos, a duquesa deixou as cores neutras e pouco chamativas de lado e usou cores vibrantes como azul intenso, vermelho vivo e verde bandeira.

O que poderemos ver no visual de Meghan daqui pra frente?

Para looks com vestidos e saias, usar meia-calça é uma das sugestões da Rainha Elizabeth para as mulheres - e, de preferência, meia-calça no tom da pele.

Meghan, que já não seguia muito essa tradição, apareceu muitas vezes nos últimos tempos com as pernas de fora.

Clutchs clássicas e joias da coroa? Os órios escolhidos por Meghan Markle prometem ar por uma transformação.

Em suas últimas aparições, ela mostrou que gosta de designs modernos. Bom exemplos disso, são os brincos de cristal de Simone Rochas e a bolsa fashionista de Gabriela Hearst, presentes em suas produções mais recentes.

Os looks de calça da duquesa são divididos entre antes e depois do casamento com Harry, em maio de 2018.

O corte sequinho da skinny se manteve o mesmo, porém lavagens mais claras e até modelos destroyed eram os preferidos de Meghan na fase pré-realeza.

Especialistas em realeza britânica dizem que existe uma regra não oficial sobre cores de esmaltes. Pode reparar que os tons de nude ou rosa bem clarinhos são usados por Kate Middleton & cia.

Meghan já quebrou essa regra no final de 2018, quando apareceu com esmaltes escuros em uma premiação de moda em Londres. Vem mais cor por aí?

Obviamente, não só o visual de Meghan e Harry que promete mudar. O casal publicou um comunicado em seu Instagram avisando que, neste momento, eles estão focados em entender como podem contribuir para o mundo neste novo capítulo de suas vidas. E avisam: "Enquanto você pode não nos ver aqui (nas redes sociais e nos holofotes), o trabalho continua".