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

Esse conteúdo é antigo

Baleias azuis voltam a local onde quase foram extintas e isso é preocupante

As baleias azuis podem estar retornando à costa da Espanha por alterações em seu habitat causadas pelas mudanças climáticas - Reprodução/Flickr/NOAA Photo Library
As baleias azuis podem estar retornando à costa da Espanha por alterações em seu habitat causadas pelas mudanças climáticas Imagem: Reprodução/Flickr/NOAA Photo Library

Colaboração para o UOL, em Santos

25/08/2021 10h59Atualizada em 25/08/2021 10h59

As baleias azuis, os maiores mamíferos do mundo, estão retornando à costa atlântica da Espanha após uma ausência de mais de 40 anos. Mas isso pode não ser uma boa notícia.

Pesquisadores estão investigando se a crise climática está levando as criaturas a mudar seus hábitos e retornar a uma área onde foram caçadas quase até a extinção.

"Acredito que a moratória da caça às baleias foi um fator chave", disse ele ao The Guardian. "Na década de 1970, pouco antes de a proibição ser introduzida, uma geração inteira de baleias azuis desapareceu. Agora, mais de 40 anos depois, estamos vendo o retorno dos descendentes dos poucos espécimes que sobreviveram."

A região da Galícia é conhecida por sua indústria baleeira centenária e por abrigar uma dúzia de portos baleeiros. A Espanha não proibiu a caça às baleias até 1986, época em que a baleia azul estava praticamente extinta na região.

Busca por alimentos ou memória ancestral

"Estou pessimista porque existe uma grande possibilidade de que as mudanças climáticas tenham um grande impacto no habitat da baleia azul", disse Alfredo López, biólogo marinho de uma ONG galega que estuda mamíferos marinhos, ao jornal La Voz de Galicia.

"Em primeiro lugar, porque elas nunca se aventuram ao sul do equador, e se o aquecimento global empurrar essa linha para o norte, seu habitat será reduzido. E em segundo lugar, se isso significar que os alimentos que elas normalmente buscam está desaparecendo, então o que estamos vendo é dramático e não algo para comemorar".

Díaz, por sua vez, especula que as criaturas também podem ter voltado para a Galícia por uma espécie de "saudade", ou memória ancestral.

"Nos últimos anos, descobriu-se que a migração da baleia azul é impulsionada pela memória, não pelas condições ambientais", disse ele. "Este ano não houve um aumento notável no plâncton, mas aqui estão elas. As experiências ficam retidas na memória coletiva e levam a espécie a retornar".

Uma baleia azul típica tem entre 20 e 24 metros de comprimento e pesa 120 toneladas - o equivalente a 16 elefantes - mas já se registrou espécimes de até 30 metros e 170 toneladas.