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

Que números você vê? Ilusão de ótica causa confusão nas redes sociais

Nem todas as pessoas conseguem enxergar cada algarismo presente nesta imagem. - Reprodução
Nem todas as pessoas conseguem enxergar cada algarismo presente nesta imagem. Imagem: Reprodução

Colaboração para o UOL

19/02/2022 04h00

Um desenho em tons de branco, cinza e preto publicado no Twitter tem gerado confusão entre usuários da rede social. Isso porque, ao olhar fixamente para ele, cada pessoa vê uma quantidade diferente de números se formando na imagem.

De acordo com cada pessoa e com o tempo observando a imagem, os usuários do Twitter tiveram respostas diferentes para o mesmo problema. Além disso, as formas parecem se mover diante dos olhos, causando ainda mais confusão.

Veja atentamente e tente descobrir que números estão na imagem:

Algumas pessoas relatam que, à primeira vista, enxergam o número 45283, mas, quando focam um pouco mais, consegue ver mais um algarismo no início e outro no fim, o que muda a visão para 3452839 — a resposta correta. Outras, contudo, não conseguem ver o 3 e o 9 de jeito nenhum e outras creem ver um número 1.

Em mais de 4 mil comentários acumulados desde a postagem, os relatos são dos mais diferentes. Há pessoas que percebem os algarismos "escondidos", porém sem conseguir identificá-los. "Eu vejo 45283. Depois, que vi as pessoas falando que estavam vendo outros dois números, eu posso ver que eles estão lá, mas não consigo ver quais são", escreveu um usuário.

Em outro caso, uma pessoa diz que enxerga apenas o número 528. "Isso diz alguma coisa sobre a minha visão?", pergunta.

O que isso aponta é que quem não consegue identificar todos os números possui uma baixa sensibilidade ao contraste, como a oftalmologia classifica a capacidade do ser humano em distinguir um objeto e o plano de fundo por trás dele.

Ter uma alta sensibilidade ao contraste é importante em casos como dirigir de noite e em locais com neblina, ou em qualquer outro tipo de situação de visibilidade ruim. O nível baixo dessa capacidade pode ser sintoma de doenças oculares, como catarata ou glaucoma, mas pode ter outras origens, como o próprio envelhecimento.

A sensibilidade depende de vários fatores, incluindo os hábitos das pessoas. Um estudo recente, por exemplo, indicou que jogar games de ação por cerca de uma hora por dia pode melhorar a percepção de contraste, assim como trazer outros benefícios para a visão.

A brincadeira ainda lembra o famoso caso do vestido, você lembra?

vestido - Reprodução/Twitter - Reprodução/Twitter
O dilema da internet de 2015: o vestido é branco e dourado ou azul e preto?
Imagem: Reprodução/Twitter