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

Pergunta pro Jokura

Cara de um, focinho do outro? Como os animais reconhecem seus filhotes

Siggy Nowak/ Pixabay
Imagem: Siggy Nowak/ Pixabay

17/08/2020 04h00

Pergunta de Daniel Jokura, de São Paulo (SP) - quer enviar uma pergunta também? Clique aqui

Filhote, seguinte: entre as espécies que mantêm um vínculo familiar entre os indivíduos, cada uma tem sua estratégia (ou uma mistura delas). Entre reconhecimento pela visão, pelo odor, pelo tato e pelo som, este último é o que faz mais barulho entre os cientistas —talvez por ser mais fácil de testar. Há inúmeras pesquisas sobre como animais identificam diferentes membros do grupo pelos sons particulares que eles emitem.

Entre as cabras, o cheiro é uma importante marca de identidade, mas o ouvido também é um importante aliado das mamães para saber quem são suas crias. Pesquisadores da Universidade Queen Mary, em Londres, gravaram o choro de nove cabritinhos com cinco semanas de vida e arquivaram os registros. Num período que variou entre sete e 13 meses após esses filhotes terem sido desmamados e separados das mães, os cientistas reproduziram as gravações em meio a choros de outros bebês. As cabras prestavam mais atenção quando ouviam os filhos.

Aves como o pinguim-imperador, que se aglomeram em colônias de até dezenas de milhares de indivíduos (lembra do filme "A Marcha dos Pinguins"?), também são capazes de se identificar por meio da voz —filhotes inclusos, claro.

Voltando aos mamíferos, estudos feitos com 22 saguis-cabeça-de-algodão demonstraram que pais, filhos e outros familiares sabem quem é quem mesmo depois de mais de quatro anos e meio vivendo separados. Tudo na base do gogó.

Há ainda outros animais capazes de reconhecer indivíduos da mesma espécie pelo som emitido, de elefantes marinhos (que sabem diferenciar ritmos e timbres) a morcegos (Megaderma lyra). Embora essas pesquisas tenham sido focadas na interação entre adultos, é lógico inferir que mães e pais saibam quem são seus filhos, e vice-versa, pela voz. No vídeo a seguir dá para ouvir a "conversa" entre um elefantinho marinho e sua mãe.

Assim como a estratégia de reconhecimento mútuo entre membros de uma mesma família de animais é variada (estudos com cães indicam reconhecimento entre pais e filhos pelo cheiro), também há bichos tão inaptos para reconhecer os parentes que são enganados por filhotes de outras espécies. Mas esse é um papo para outra oportunidade...

Fontes: Artigos - Mother goats do not forget their kids' calls; Penguins use the two-voice system to recognize each other; Long-term Memory for Calls of Relatives in Cotton-top Tamarins (Saguinus oedipus); Northern Elephant Seals Memorize the Rhythm and Timbre of Their Rivals' Voices; Perception of individuality in bat vocal communication: discrimination between, or recognition of, interaction partners?; Long-term retention of kinship recognition established during infancy in the domestic dog.

Tem alguma pergunta? Deixe nos comentários ou mande para nós pelo WhatsApp.