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

Quase 300 aves morrem após colidirem contra o World Trade Center, nos EUA

Voluntária encontrou mais de 200 aves mortas nesta semana - Reprodução/Twitter
Voluntária encontrou mais de 200 aves mortas nesta semana Imagem: Reprodução/Twitter

Do UOL, em São Paulo

16/09/2021 17h36Atualizada em 17/09/2021 19h17

Centenas de aves migratórias morreram em Nova York, nos Estados Unidos, após colidirem com as torres do World Trade Center no início desta semana, segundo o New York Post. De acordo com a publicação, ao menos 291 pássaros formaram um cemitério de carcaças nas calçadas próximo aos edifícios três, quatro e sete do complexo.

Melissa Breyer, voluntária do grupo de conservação ambiental Audubon, informou à publicação que as aves, que eram de diferentes espécies, provavelmente ficaram desorientadas por conta das luzes dentro dos edifícios e pelos vidros reflexivos. Elas voavam para o sul entre a noite de segunda (13) e a manhã da terça-feira (14). Ainda segundo a voluntária, é comum encontrar cerca de 15 ou 20 aves mortas durante a travessia e que, portanto, o número encontrado ontem é surpreendente.

"Fiquei totalmente chocada. Foi uma coisa avassaladora", disse ela à publicação. "Eu olhei em volta e foi como um pesadelo". As imagens dos animais mortos foram compartilhadas nas redes sociais e, segundo ela, o número pode ser ainda maior já que não foram contabilizados aqueles que foram varridos e esmagados.

"As luzes podem ser apagadas, as janelas podem ser alteradas. Por favor, façam alguma coisa", implorou em publicação.

Ativistas afirmam que o problema pode ser contornado com a redução da iluminação noturna dos edifícios, além de inserção de adesivos no vidro reflexivo para mostrar às aves que se trata de um material sólido. Em junho, uma medida semelhante foi adotada próxima ao Liberty Park, em Manhattan, após dezenas de aves serem encontradas mortas no local por conta de uma barreira de vidro.

Ao New York Post, um representante do World Trade Center informou que os operadores estão tomando medidas diante da situação, especialmente durante a estação migratória. Ainda, segundo a publicação, vidros especiais já foram instalados em outras torres do complexo de edifícios.