;(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; // 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(); })();

Topo

Reformar cantinhos do apê com pouca grana? É possível! Veja antes e depois

Mais Tapa na casa
1 | 25
Siga o UOL Nossa no

Apto.21

Colaboração para Nossa

13/09/2022 04h00

Sabe aquela parede tristinha ou o espaço que está precisando de um pequeno 'tapa' na decoração? Eles são o foco da nova temporada do Tapa na Casa, a série de Nossa com vídeos de reformas rápidas e de baixo custo.

Nesta edição especial 'Cantinhos', os apresentadores Camila e o Pablo vão ensinar vários truques que aprenderam decorando por conta própria seu apartamento — e que fez tanto sucesso que deu origem ao Instagram @apto.21.

Todo mundo tem aquele cantinho do apê que precisa apenas de um pequeno trato, mas às vezes falta tempo, dinheiro ou inspiração. Nesta temporada, vamos trazer novas soluções, mostrar como fazer e provar que, sim, é possível!" Camila

No episódio de estreia, o casal tem o desafio de dar vida nova a uma área de trabalho que era improvisada e sem brilho. Com muitas ideias que você pode aplicar na sua casa, eles criam um home office mais prático, funcional e bonito.

Confira no vídeo o o a o e todas as técnicas que resultaram neste antes e depois do cantinho de trabalho:

O home office antes - Ana Paula Lopes - Ana Paula Lopes
O home office antes
Imagem: Ana Paula Lopes
E como ele ficou depois - Ana Paula Lopes - Ana Paula Lopes
E como ele ficou depois
Imagem: Ana Paula Lopes

Quem faz o Tapa na Casa

Em 2015, Camila e Pablo se viram com o desafio de reformar seu primeiro apartamento, de 64 m², em São Paulo.

Com um orçamento mais limitado que nossas muitas ideias, queríamos criar a casa dos nossos sonhos sem gastar muito"

No processo de reforma, eles aprenderam muitas dicas práticas, aram por perrengues e decidiram compartilhar o processo em um blog e no Instagram @apto.21.

Camila e Pablo, apresentadores do Tapa na Casa - Ana Paula Lopes - Ana Paula Lopes
Camila e Pablo, apresentadores do Tapa na Casa
Imagem: Ana Paula Lopes

Desde 2020, o casal também mostra seus truques e inspirações aqui no comando do Tapa na Casa, em reformas de cômodos completos e episódios curtos de DIY (o famoso 'faça você mesmo'), ensinando técnicas de decoração.

Você pode conferir todos os episódios anteriores — com reformas de quartos, salas, cozinhas, varandas e até de espaço para o petno YouTube de Nossa.

Quer um petisco? Deslize a galeria abaixo e confira o antes e depois de algumas transformações já realizadas no programa: