;(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();
})();
20 anos de 'O Senhor dos Anéis': Confira o antes e depois do elenco
Elijah Wood interpretou Frodo nos filmes da saga "O Senhor dos Anéis" Imagem: Reprodução
De Splash, em São Paulo
19/12/2021 04h00
Neste mês, o filme "O Senhor dos Anéis: A Sociedade do Anel" completa 20 anos: o longa foi exibido pela primeira vez em Londres no dia 10 de dezembro de 2001.
Confira como estão hoje os atores que interpretaram Frodo, Legolas, Gandalf e mais!
Orlando Bloom como Legolas em "O Senhor dos Anéis"
Divulgação/IMDb/New Line Productions, Inc.
6 / 16
Hoje, Orlando Bloom está casado com Katy Perry, com quem tem a filha Daisy Dove Bloom. Ele também é pai de Flynn Bloom, fruto do casamento com a modelo Miranda Kerr.
Reprodução/Instagram
7 / 16
Cate Blanchett era Galadriel
Cate Blanchett como Galadriel na trilogia O Senhor dos Anéis
Reprodução
8 / 16
Durante a pandemia, a atriz australiana se isolou com a família na Inglaterra
Vittorio Zunino Celotto/Getty Images
9 / 16
Sean Bean interpretou Boromir
Sean Bean como Boromir em meme famoso de "O Senhor dos Anéis"
reprodução/O Senhor dos Anéis
10 / 16
Depois, Sean Bean ainda participou de outra grande saga da fantasia: interpretou Ned Stark em 'Game of Thrones'. Ele diz que ainda não assistiu ao final da série!
Reprodução/Instagram
11 / 16
Sean Astin era Samwise Gamgee
Sean Astin interpretou Samwise Gamgee em 'O Senhor dos Anéis'
Reprodução
12 / 16
Depois, ele interpretou Bob Newby na segunda temporada de 'Stranger Things'. Sean Astin também tem um clube do livro, que neste mês lê 'A Sociedade do Anel' para comemorar os 20 anos do filme!
Reprodução/Fox10
13 / 16
Liv Tyler interpretou Arwen
Cena de ?O Senhor dos Anéis: O Retorno do Rei? (2003), de Peter Jackson
Reprodução
14 / 16
Depois, Liv seguiu na carreira de atriz: seu último trabalho no cinema foi 'Ad Astra: Rumo às Estrelas', de 2019
Reprodução/Instagram
15 / 16
Viggo Mortensen era Aragorn
Viggo Mortensen como Aragorn na trilogia "O Senhor dos Anéis"
Reprodução
16 / 16
No ano ado, Viggo Mortensen fez sua estreia como diretor no filme 'Ainda Há Tempo'. O longa chegou ao Brasil neste mês
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.