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

Final de 'Família Dinossauros' não é exatamente como você se lembra

Reprodução/ Disney

De Splash, em São Paulo

18/08/2021 12h01

"Família Dinossauros" chegou ao Disney+ nesta quarta-feira, 18, e mesmo se tratando de uma série de 1991, a produção ainda faz sucesso.

A sitcom estrelada por Dino da Silva Sauro e família contava com personagens carismáticos, humor ácido e críticas sociais f***.

Continua depois da publicidade

Querida, Cheguei!

O título foi criado por Jim Henson, também responsável por "Os Muppets", durou quatro temporadas e teve 65 episódios.

A história acompanhava a família Silva Sauro, que vivia na Pangeia, há 60 milhões de anos.

Reprodução/ Disney - Reprodução/ Disney
Imagem: Reprodução/ Disney

Com diversos bordões e piadas memoráveis, "Família Dinossauros" é lembrada até hoje não apenas pela sua narrativa, mas também pelo final agridoce.

Por causa da baixa audiência, ela foi cancelada em 1994 e, por se tratar de uma série com assuntos polêmicos, o fim não poderia ter sido diferente.

Arte UOL - Arte UOL
Imagem: Arte UOL

'Não é a Mamãe!'

O último episódio nos mostra que não há mais possibilidade de vida na Terra, portanto, todos morrerão.

Mas, diferentemente do que muitos podem imaginar, o fim da Era dos Dinossauros da série não acontece em decorrência de um meteoro, mas sim de uma Era do Gelo.

Continua depois da publicidade

Chamado de "Mudando a Natureza", o episódio derradeiro mostra a devastação causada pela ganância: a fábrica onde Dino trabalha extermina todos os besouros, e o protagonista fica encarregado de jogar um agrotóxico para reverter a situação, mas isso acaba com todas as plantas do planeta.

Reprodução/ Disney - Reprodução/ Disney
Imagem: Reprodução/ Disney

Dino acredita que o problema pode ser solucionado facilmente, então tem a catastrófica ideia de bombardear um vulcão na esperança de gerar chuva, o que dá errado.

A atitude tem consequências drásticas e mortais, pois um inverno intenso se inicia e não há mais escapatória.

Continua depois da publicidade

Boa noite, e adeus!

Dino percebe o que fez, e pede desculpas à família. Ele tenta até mesmo consolar Baby, o bebê, e diz que tudo ficará bem.

A cena final mostra os personagens tentando se esquentar, enquanto a casa é coberta por neve. Pois é, triste demais.

Neve contínua, escuridão e frio extremo. Aqui é Howard Handupme. Boa noite. E adeus!
diz o apresentador do telejornal ao anunciar o fim

Sim, "Família Dinossauros" destrói qualquer coração com este final, mas traz reflexões importantes e assuntos até hoje discutidos, mesmo que se tratando de uma produção de mais de 20 anos.