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

Cenário de filme de terror? A ilha que é tomada por milhões de caranguejos

Além de caranguejos, a Christmas Island oferece lindas paisagens para o turista - David Stanley Travel/Creative Commons - David Stanley Travel/Creative Commons
Além de caranguejos, Christmas Island oferece lindas paisagens para o turista
Imagem: David Stanley Travel/Creative Commons

DO UOL

17/01/2017 04h04

A Austrália é famosa por abrigar uma grande variedade de animais assustadores, como morcegos gigantes, aves assassinas e crocodilos mais compridos do que um carro. 

Já aos que têm ojeriza ao formato um tanto alienígena dos crustáceos, o país da Oceania pode proporcionar um cenário de apocalipse: todos os anos, uma linda ilha australiana chamada Christmas Island é tomada por dezenas de milhões de caranguejos (há gente que fala em 120 milhões), um fenômeno que assusta muitas pessoas, mas também atrai turistas ao local. 

Os bichos invadem as ruas, pontes e jardins residenciais da ilha, formando um tapete vermelho que se move lentamente sobre o terreno insular. Trata-se de uma migração que ocorre geralmente entre os meses de novembro e janeiro, quando os caranguejos deixam as florestas da Christmas Island e se locomovem em direção ao mar, para reprodução e desova. 

Christmas Island e os carangueijos - Xinhua/Xu Yanyan - Xinhua/Xu Yanyan
Turista se vê cercada durante migração de caranguejos em Christmas Island
Imagem: Xinhua/Xu Yanyan

O episódio, logicamente, altera a rotina de todo este território australiano, que está situado no oceano Índico e tem cerca de 2.000 habitantes.

Sem apresentar graves riscos aos humanos, os crustáceos não são considerados pelas autoridades locais como uma praga. Ao contrário: durante a migração, a polícia e guardas-florestais proíbem que carros transitem por algumas vias da área e até constroem pontes de plástico sobre as estradas mais movimentadas, para que os bichinhos em sobre o asfalto com segurança. 

Além disso, mais da metade da ilha tem status de santuário ecológico onde, além de 14 espécies de caranguejos, existem pássaros raros, lindas praias e excelentes pontos de mergulho.

Caranguejo é fotografado enquanto cruza estrada da Christmas Island - John Tann/Creative Commons - John Tann/Creative Commons
Caranguejo é fotografado enquanto cruza estrada da Christmas Island
Imagem: John Tann/Creative Commons

Tudo isso atrai milhares de turistas por ano à Christmas Island, muitos deles fazendo questão de chegar à ilha bem no período da migração. Afinal, é a melhor época para fazer grandes fotos e se ver no meio de um fenômeno de características extremamente únicas. 

E vale lembrar: o fluxo migratório também ocorre no sentido inverso. Depois da desova, os caranguejos retornam às áreas florestais da ilha, forrando novamente as ruas locais em vermelho vivo. A espécie predominante neste fluxo é o chamado caranguejo-vermelho, que pode ter mais de 11 centímetros de largura. 

Christmas Island, porém, é um local remoto: fica a cerca de 2.000 quilômetros da costa australiana. Aviões partem da cidade de Perth rumo à ilha. Há boa infraestrutura hoteleira e de restaurantes por lá. 

No topo deste texto, veja um vídeo que mostra um pouco da dimensão da migração dos caranguejos. 

Viajante presencia migração de caranguejos na Christmas Island, na Austrália - Ian Usher/Creative Commons - Ian Usher/Creative Commons
Viajante presencia migração de caranguejos na Christmas Island, na Austrália
Imagem: Ian Usher/Creative Commons