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

Saudades da empresa? Site traz sons de escritório de volta para o seu lar

Site imisstheoffice.eu - Reprodução
Site imisstheoffice.eu Imagem: Reprodução

Felipe Oliveira

Colaboração para Tilt

14/04/2020 04h00

A pandemia de covid-19 fez com que boa parte das empresas liberassem os colaboradores para trabalharem em casa, e muitos desses funcionários não estão acostumados com o home office. Se você faz parte desse grupo e sente saudades dos sons do escritório, o site imisstheoffice.eu pode te ajudar.

Para muitos, as conversas e reuniões de trabalho deixaram de ser pessoalmente e am a ser por aplicativos como WhatsApp, Slack, Skype ou Zoom. E, por mais incrível que possa parecer, ficar no silêncio absoluto faz algumas pessoas não renderem o bastante ou desviarem a atenção para a televisão, o rádio ou o celular.

Projeto criado pela agência de criatividade alemã Kids, o imisstheoffice.eu traz sons de impressora, telefones tocando, conversas e risadas, companheiros de baia assoviando do nada e outros que ajudam a recuperar a ambientação do escritório. Eles usam arquivos de áudio do site Free Sound, sob licença livre de uso (Creative Commons).

Para reviver o ambiente do seu escritório é simples: basta entrar no site e apertar o play. Inicialmente, o escritório começa a funcionar com três colaboradores, mas você pode aumentar o ruído colocando até dez pessoas. Além disso, o escritório virtual tem móveis e equipamentos que são ativados ao clicar com o mouse.

Portanto, se você está com saudades do barulho da impressora, basta clicar nela que o ruído começa. Se está sentindo falta do som de cadeiras arrastando ou do companheiro que vai até o bebedouro pegar água, também.

Os "colegas de trabalho virtuais" também são ativados pelo clique. Mas, tanto os colegas quantos os equipamentos ativam sozinhos após determinado momento em silêncio. Por isso, se você deixar o site aberto em outra aba, de repente escutará alguém mastigando, os e conversas.

SIGA TILT NAS REDES SOCIAIS