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

Cientistas descobrem forma de evitar que óculos fiquem embaçados

Getty Images
Imagem: Getty Images

Gabriel Dias

Colaboração para Tilt, em São Paulo

17/12/2022 14h05

Cientistas do Instituto de Pesquisa ETH Zurich, na Suíça, anunciaram a descoberta de um novo tipo de revestimento capaz de aquecer os óculos e impedi-lo de ficar embaçado, resolvendo um problema que muito incomoda as pessoas que precisam do objeto para enxergar.

Os resultados foram publicados na revista Nature Nanotechnology, depois de três anos de pesquisa, na última semana. Infelizmente, ainda não há previsão para produção comercial da solução.

Óculos com lentes embaçadas são um problema desde o advento das lentes ópticas, mas atingiu um pico durante a pandemia, quando todos os usuários de óculos descobriram da maneira mais difícil que a maioria das máscaras libera a respiração em direção aos olhos. Foi pensando nisso que os pesquisadores desenvolveram uma forma de tentar reverter o problema.

Ouro é o segredo da solução

Sabendo que o calor é a melhor maneira de manter uma superfície de vidro livre de embaçamento, o novo material de revestimento utiliza nanopartículas de ouro que absorvem a luz em vez de eletricidade, justamente para fazer isso.

O dispositivo usa uma camada de nanopartículas de ouro agrupadas, imprensadas entre duas camadas ultrafinas de óxido de titânio. Todo o revestimento tem apenas 10 nanômetros de espessura.

O revestimento é capaz de absorver a radiação infravermelha do sol e, assim, aquecer o vidro das lentes em até 8 graus Celsius.

Os pesquisadores afirmam que as propriedades de refração do óxido de titânio aumentam a eficiência do efeito de aquecimento, enquanto a camada externa ajuda a proteger o ouro do desgaste.

Quando não houver luz solar direta, a camada de ouro pode ajudar a conduzir eletricidade, como uma bateria, e continuar a aquecer o revestimento da mesma maneira.

Como são nanopartículas de ouro, o revestimento não tende a ser muito caro, disseram os pesquisadores do jornal britânico The Guardian.

Os cientistas, no entanto, já anunciaram que procuram por materiais de menor valor para popularizar o revestimento o mais rápido possível.

Segundo a equipe de cientistas, o método que evita óculos embaçados também pode ser aplicado a para-brisas de carros no futuro.