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

SPFW comemora 25 anos com formato inédito; saiba como assistir

SPFW começa hoje (4) com edição inédita e 100% digital; saiba como assistir e confira o line-up - Divulgação
SPFW começa hoje (4) com edição inédita e 100% digital; saiba como assistir e confira o line-up
Imagem: Divulgação

Gustavo Frank

De Nossa

04/11/2020 12h40

O São Paulo Fashion Week inicia hoje com um formato inédito para comemorar os 25 anos de história do evento. A cobertura será feita por Nossa com entrevistas, bastidores e exposição das coleções, que poderão ser vistas aqui, além dos destaques de todos os dias no nosso perfil do Instagram (@nossa_uol).

O evento, que acontece de 4 a 8 de novembro, realiza uma série de ações que reverenciam a pulsão criativa plural e diversa da cidade e celebra o espaço urbano como o seu maior canal de expressão, oferecendo conteúdos inéditos e um formato democrático que promove interação com o público.

Serão mais de 500 conteúdos programados, durante 05 dias, em todos os canais do SPFW e com projeções mapeadas nas cinco regiões da cidade.

Os desfiles estarão disponíveis no canal oficial do YouTube do SPFW.

"O momento exige criatividade," afirma Paulo Borges, Diretor Criativo do SPFW. "Ver o mundo com outros olhos é essencial para enxergar outras realidades e desbravar novos territórios. Em um mundo cada vez mais acelerado e volátil, as escolhas que fazemos e as direções que seguimos terão enormes impactos em nossas vidas e no mundo. Criamos uma semana dedicada às diversas manifestações culturais e que sempre encontraram no evento um espaço receptivo de conexão e visibilidade".

Celebração

Na noite de hoje, o Projeto Turmalinas fará uma apresentação de balé no Vale do Anhangabaú, no centro histórico de São Paulo.

O projeto nasce com o desejo de ressaltar as artistas negras e trazer esperança de uma sociedade mais justa, respeitando a história e ancestralidade, além de ser um espelho e referências para nossas crianças.

Tratado de inclusão

No último sábado (31), o coletivo Pretos Na Moda divulgou um tratado em parceria com o São Paulo Fashion Week e alguns profissionais do setor.

Entre as ações pregadas pelo acordo, está a obrigação de todo desfile do SPFW ter pelo menos 50% do casting composto por pessoas negras, indígenas e asiáticas.

O documento estipula ainda valores mínimos de cachês para as apresentações, prazos de pagamento em até 90 dias após o trabalho e diretrizes de comportamento e respeito no trabalho.

O tratado será renovado e ajustado a cada temporada tendo em vista que o mercado precisa se renovar a cada temporada.

Line-up

QUARTA, 4/11

  • 14h: FERNANDA YAMAMOTO
  • 15h: VICTOR HUGO MATTOS
  • 16h30: IRRITA
  • 18h: ISABELA CAPETO
  • 19h30: ÁLG
  • 20h: CELEBRAÇÃO #SPFW25ANOS
  • 21h30: LENNY NIEMEYER

QUINTA, 5/11

  • 14h: KORSHI 01
  • 16h: PONTO FIRME
  • 18h: A.NIEMEYER
  • 19h30: ALEXANDRE HERCHCOVITCH, 50 ANOS, ESTILISTA
  • 20h30: AMIR SLAMA
  • 21h30: ANOTHER PLACE

SEXTA, 6/11

  • 14h: LUCAS LEÃO
  • 15h: LED
  • 16h: MISCI
  • 18h: RENATA BUZZO
  • 19h30: JULIANA JABOUR
  • 20h30: HANDRED
  • 21h30: JOÃO PIMENTA

SÁBADO, 7/11

  • 14h: MARTINS
  • 15h: CACETE
  • 16h30: MODEM
  • 18h: ÃO 1
  • 9h30: AMAPÔ
  • 20h30: FREIHEIT
  • 21h30: LINO VILLAVENTURA

DOMINGO, 8/11

  • 14h: GLORIA COELHO
  • 15h30: APARTAMENTO 03
  • 17h: ALUF
  • 18h30 ANGELA BRITO
  • 19h30: NERIAGE
  • 20h30: ISAAC SILVA
  • 21h30: RONALDO FRAGA