;(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();
})();
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.
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.
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.
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.
ID: {{comments.info.id}}
URL: {{comments.info.url}}
Ocorreu um erro ao carregar os comentários.
Por favor, tente novamente mais tarde.
{{comments.total}} Comentário
{{comments.total}} Comentários
Seja o primeiro a comentar
Essa discussão está encerrada
Não é possivel enviar novos comentários.
Essa área é exclusiva para você, , ler e comentar.
Só s do UOL podem comentar
Ainda não é ? Assine já.
Se você já é do UOL, faça seu .
O autor da mensagem, e não o UOL, é o responsável pelo comentário. Reserve um tempo para ler as Regras de Uso para comentários.